2010-07-09 105 views
1

在一個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左右刪除的引號)在沒有空格時起作用)。

回答

9

"[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