for i in "a" "a b"; do
echo $i;
done
a
a b
我怎麼能寫類似for i in $input; do
並分配給"a" "a b"
input
?空白是重要的。否則$(echo ...)
將工作。
編輯:這個問題不是關於文件,也不是關於一些輸入,可以使用[email protected]
捕獲。
for i in "a" "a b"; do
echo $i;
done
a
a b
我怎麼能寫類似for i in $input; do
並分配給"a" "a b"
input
?空白是重要的。否則$(echo ...)
將工作。
編輯:這個問題不是關於文件,也不是關於一些輸入,可以使用[email protected]
捕獲。
既然你使用bash,你可以這樣做:
input=("a" "a b")
for i in "${input[@]}"; do
echo $i
done
這隻能便攜與"[email protected]"
構建命令行參數來完成。
然而,如果你不需要實際命令行參數了,你可以用set
來代替它們的內容:
input='"a" "a b"'
eval set fnord $input
shift
for i in "[email protected]"; do
echo $i
done
你應該知道,空有問這個問題提示你正在接近複雜程度,你應該轉向一種較少受限的腳本語言(Perl和Python是通常的選擇)。
shell函數獲得自己的命令行參數,所以它不會吹走原始參數。 'echoi(){for我在「$ @」;做echo $ i;完成; } echoi「a」「a b」' –
這很好,如果周圍的上下文允許你使用shell函數,但有時候這不是一個選項;我們不知道OP的情況如何。 – zwol
請注意,這是一個常見的成語,它是默認的。你可以在'$ @'中省略'並且只寫:'爲我;做echo $ i; done' –
@Zack問題標記爲'bash'。我們現在是否要求,除了正確之外,即使OP要求bash,答案也必須符合POSIX標準? –
你應該至少注意到它們是非標準的。但是我認爲一個人不應該使用bashisms:如果沒有辦法在可移植shell中完成某件事情,那麼正確的選擇是使用Perl或Python代替。 – zwol
@Zack右。即使腳本從來不打算被OP以外的任何人使用,但在他們控制的環境中,儘管「bashisms」更短,更快和更少,但它們不被允許使用「bashisms」比POSIX標準外殼古怪。問題不是「這項工作的最佳工具是什麼?」問題是「你怎麼做到這是事端?」如果操作系統想要演示python在shell中的優點,他可以在無數討論該問題的網站上閱讀它。 –