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

raf*_*fak 1 parameters bash shell

在shell脚本中我希望变量p等于"$@",以便以下两行代码产生相同的结果:

for x in "$p"; do echo $x; done
for x in "$@"; do echo $x; done
Run Code Online (Sandbox Code Playgroud)

如果我这样做p=$@或者p="$@"这不起作用.当命令行参数的名称中有空格时,我找不到这个问题的简单解决方法(组合p="$@"for x in $p(在$ p周围删除的引号)在没有空格时有效).

Chr*_*sen 9

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

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