为什么shell将一个带引号的“$@”展开为多个参数

gwo2fgha  于 2023-05-01  发布在  Shell
关注(0)|答案(1)|浏览(117)

以下命令按预期打印foo bar

sh -c 'printf "$@"' -- "foo bar"

但是,当使用foobar作为单独的参数调用时,它只打印foo

sh -c 'printf "$@"' -- foo bar

shbash在这里具有相同的行为)
这表明表达式"$@"被转换为多个参数,导致调用printf foo bar,而不是printf "foo bar"
1.为什么会这样呢?我以为引号表示单个字符串?
1.如何更改sh -c命令以在传递多个参数时获得所需的行为(printf "foo bar")?

nmpmafwu

nmpmafwu1#

为什么会这样呢?
因为$@很特别。
我以为引号表示单个字符串?
不适用于$@
当传递多个参数时,如何更改sh -c命令以获得所需的行为(printf“foo bar”)?
可以使用"$*"用空格(IFS的第一个字符)连接参数。
从 www.example.com :
2.5.2特殊参数
@
[...]当展开在双引号内[。..]初始字段应作为单独字段保留[...]

相关问题