2013-09-27 27 views
1

我在bash中有以下循環,它在chrooted目錄中創建循環設備。在bash for循環中定義範圍不起作用

for var in 0 1 2 3 .. 7 
do 
    MAKEDEV -d ${CHROOT}/dev -x loop$var 
done 

這不適合我,因爲它創建loop3它需要..從字面上,並嘗試創建循環..並失敗。但根據這tutorial它應該工作。我得到它通過執行以下操作:

for ((var=0; var<=7; var++)) 
do 
    MAKEDEV -d ${CHROOT}/dev -x loop$var 
done 

我仍然想知道爲什麼我首先嚐試的for循環不起作用。請幫忙。

回答

1

我認爲你正在閱讀的教程望文生義。該turorial 確實

for VARIABLE in 1 2 3 4 5 .. N 

但是從字面上看,這是不正確的bash語法 - 我覺得作者只是想說,對於這樣的for循環,你需要明確地列出你需要的所有值迭代。所以你的情況,這將是:

for var in 0 1 2 3 4 5 6 7 

本教程還提到括號擴展,這@glennjackman在他的回答,這也是完全正確的語法給出。

+0

明白了。所以'..'在bash中的任何地方都不起作用。正確? – Lee

+0

不,''''*可以在[大括號擴展]中工作(https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html) - 請參閱@ glennjackman的回答。 –

3

在bash,你可以寫

for var in {0..7} 

你不能說

end=7 
for var in {0..$end} 

因爲brace expansion occurs before variable expansion。如果您在變量有你點範圍,你可以使用C風格的for循環(像你一樣)或seq

for var in $(seq 0 $var) 
+0

但我沒有使用範圍內的變量。 – Lee

+1

你沒有,但有一天你會和你想知道爲什麼它不起作用。 –