2012-06-06 47 views

回答

4

既然你使用bash,你可以這樣做:

input=("a" "a b") 

for i in "${input[@]}"; do 
    echo $i 
done 
+2

@Zack問題標記爲'bash'。我們現在是否要求,除了正確之外,即使OP要求bash,答案也必須符合POSIX標準? –

+1

你應該至少注意到它們是非標準的。但是我認爲一個人不應該使用bashisms:如果沒有辦法在可移植shell中完成某件事情,那麼正確的選擇是使用Perl或Python代替。 – zwol

+3

@Zack右。即使腳本從來不打算被OP以外的任何人使用,但在他們控制的環境中,儘管「bashisms」更短,更快和更少,但它們不被允許使用「bashisms」比POSIX標準外殼古怪。問題不是「這項工作的最佳工具是什麼?」問題是「你怎麼做到這是事端?」如果操作系統想要演示python在shell中的優點,他可以在無數討論該問題的網站上閱讀它。 –

1

這隻能便攜與"[email protected]"構建命令行參數來完成。

然而,如果你不需要實際命令行參數了,你可以用set來代替它們的內容:

input='"a" "a b"' 
eval set fnord $input 
shift 
for i in "[email protected]"; do 
    echo $i 
done 

你應該知道,空有問這個問題提示你正在接近複雜程度,你應該轉向一種較少受限的腳本語言(Perl和Python是通常的選擇)。

+1

shell函數獲得自己的命令行參數,所以它不會吹走原始參數。 'echoi(){for我在「$ @」;做echo $ i;完成; } echoi「a」「a b」' –

+0

這很好,如果周圍的上下文允許你使用shell函數,但有時候這不是一個選項;我們不知道OP的情況如何。 – zwol

+0

請注意,這是一個常見的成語,它是默認的。你可以在'$ @'中省略'並且只寫:'爲我;做echo $ i; done' –