2017-03-31 10 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} 

行うことになっているものを行うことは決してありません。他の拡張前

[..]ブレース展開が行われるman bashページから引用

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

ようforループCスタイルとbashに適切なループを使用し、そして他の展開に特有の文字はその結果に保存されます。それは厳密にテキストです[..]

+1

ああ、うわー、バッシュは奇妙です。さて、これはとても役に立ちます! – JoeM05

関連する問題