如何将参数列表“$ @”分配给另一个变量?

时间:2010-07-09 12:06:20

标签: bash shell parameters

在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周围删除的引号)在没有空格时有效)

1 个答案:

答案 0 :(得分:9)

"$@"的特殊之处在于即使它是单引号表达式,它也会扩展为零或更多“单词”。你不能用普通参数完成同样的事情,但是(使用稍微不同的语法)可以用数组变量/参数完成(例如在 bash ksh zsh ):

array_var=("$@")
for x in "${array_var[@]}"; do printf '<<%s>>\n' "$x"; done