以下命令按预期打印foo bar
:
sh -c 'printf "$@"' -- "foo bar"
但是,当使用foo
和bar
作为单独的参数调用时,它只打印foo
:
sh -c 'printf "$@"' -- foo bar
(sh
和bash
在这里具有相同的行为)
这表明表达式"$@"
被转换为多个参数,导致调用printf foo bar
,而不是printf "foo bar"
。
1.为什么会这样呢?我以为引号表示单个字符串?
1.如何更改sh -c
命令以在传递多个参数时获得所需的行为(printf "foo bar"
)?
1条答案
按热度按时间nmpmafwu1#
为什么会这样呢?
因为
$@
很特别。我以为引号表示单个字符串?
不适用于
$@
。当传递多个参数时,如何更改sh -c命令以获得所需的行为(printf“foo bar”)?
可以使用
"$*"
用空格(IFS的第一个字符)连接参数。从 www.example.com :
2.5.2特殊参数
@
[...]当展开在双引号内[。..]初始字段应作为单独字段保留[...]