如何将参数列表“$ @”分配给其他变量?

问题描述:

在一个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 
+0

好吧,这是行不通的。它什么都不打印。 – sivann 2012-06-14 07:04:20

+1

@sivann:如果已经建立了一些位置参数(例如,将代码保存到一个文件并使用额外的参数运行它:'bash/path/to/file arg1'arg2 has spaces''),上面的代码将只打印一些东西。没有更多的细节,很难说出你遇到了什么问题。你可能想问一个关于你想要做什么(以及你已经尝试过的)的更多细节的新问题。 – 2012-06-14 17:49:59