在shell脚本中,我希望变量p
等于"$@"
,以便以下两行代码产生相同的结果:
for x in "$p"; do echo $x; done
for x in "$@"; do echo $x; done
如果我p=$@
或p="$@"
这不起作用。
当命令行参数的名称中包含空格时,我找不到解决此问题的简单方法(组合p="$@"
和for x in $p
(在$ p周围删除的引号)在没有空格时有效)
答案 0 :(得分:9)
"$@"
的特殊之处在于即使它是单引号表达式,它也会扩展为零或更多“单词”。你不能用普通参数完成同样的事情,但是(使用稍微不同的语法)可以用数组变量/参数完成(例如在 bash , ksh , zsh ):
array_var=("$@")
for x in "${array_var[@]}"; do printf '<<%s>>\n' "$x"; done