2011-04-19 245 views
2

可能重複:
How do I iterate over a range of numbers in bash?bash的for循環問題

當我這樣做:

RANGE_COUNT=28 
for i in {0..$RANGE_COUNT} ; do  echo $i; done 

我得到這個

{0..28} 

當我這樣做:

for i in {0..5} ; do  echo $i; done 

我得到這個:

0 
1 
2 
3 
4 
5 

這是怎麼回事與以及如何利用它做些什麼,我清楚地打算和我顯然不正確說明?

+0

thx ..只是不好搜索fu ..關閉問題爲dup – Zak 2011-04-19 22:22:47

回答

3

人的bash

括號擴展是 之前進行任何其他擴展,以及任何 特殊字符與其他 擴展在 結果被保留。這是嚴格的文本。 Bash 不適用任何語法 解釋 上下文的擴展或 括號之間的文本。

因此,這是一個純粹的文本宏展開,早在參數擴展之前完成的事情。

殼是高度優化的宏處理器和更正式的編程語言之間的混合。爲了優化典型的用例,我們做出了各種妥協。有時語言會變得更復雜,有時會受到限制。

1

使用算術符號:

for ((i=0; i<$RANGE_COUNT; i++)); do echo $i; done 
4

,你可以使用C風格的for循環

for((i=1;i<=$RANGE_COUNT;i++)) 
do 
    ... 
done 

或使用eval

for i in $(eval echo {0..$RANGE_COUNT}); do echo $i; done 

其他方法包括while循環

i=0 
while [ "$i" -le "$RANGE_COUNT" ]; do echo $i; ((i++)); done