如何将参数列表“$ @”分配给其他变量?
问题描述:
在一个shell脚本,我想要一个变量p
等于"[email protected]"
,这样的代码如下两行产生相同的结果:
for x in "$p"; do echo $x; done
for x in "[email protected]"; do echo $x; done
如果我做[email protected]
或p="[email protected]"
这不起作用。 当命令行参数名称中有空格时,找不到解决此问题的简单解决方法(组合为p="[email protected]"
和for x in $p
(在$ p左右删除的引号)在没有空格时起作用)。
答
"[email protected]"
是特殊的,即使它是一个单引号的表达它扩大到零或更多的“单词”。你不能做到同样的事情用一个正常的参数,但(使用稍微不同的语法),它可以与一个数组变量/参数来实现(例如,在庆典,KSH,的zsh):
array_var=("[email protected]")
for x in "${array_var[@]}"; do printf '<<%s>>\n' "$x"; done
好吧,这是行不通的。它什么都不打印。 – sivann 2012-06-14 07:04:20
@sivann:如果已经建立了一些位置参数(例如,将代码保存到一个文件并使用额外的参数运行它:'bash/path/to/file arg1'arg2 has spaces''),上面的代码将只打印一些东西。没有更多的细节,很难说出你遇到了什么问题。你可能想问一个关于你想要做什么(以及你已经尝试过的)的更多细节的新问题。 – 2012-06-14 17:49:59