2017-03-31 134 views
1

我剛剛接觸bash腳本。 我試圖使用計數器變量在嵌套for循環,像這樣:使用變量定義嵌套for循環中的計數器

dir_count=$(find dump_${d}/* -maxdepth 0 -type d | wc -l) 
count_by=11 

for ((i=0;i<=$dir_count;i+=$count_by)) 
do 
    ((start=$i+1)) 
    ((end=$count_by+$i)) 
    echo $start $end 
    for dir in {$start..$end} 
     echo $dir 
    done 
done 

輸出是這樣的(我得到錯誤):

1 11 
./loopy.sh: line 23: [: {1..11}: integer expression expected 
12 22 
./loopy.sh: line 23: [: {12..22}: integer expression expected 
23 33 
./loopy.sh: line 23: [: {23..33}: integer expression expected 

1,11,12, 22,23,33對我來說都是整數!可以鍵入變量嗎?我認爲這不是。

謝謝!

回答

1

bash括號膨脹會發生很多以前可變膨脹,所以你的代碼

for dir in {$start..$end} 

永遠不會做什麼是應該做的;在bash使用適當的環與C語言風格的for循環作爲

for ((dir=start; dir<=end; dir++)); do 
    echo "$dir" 
done 

man bash頁面引用,

[..]執行括號擴展任何其它擴展之前,和任何對其他擴展特殊的字符都會保留在結果中。這是嚴格的文字[..]

+1

哦哇,Bash是奇怪的。好的,這非常有幫助! – JoeM05