Bashでは中括弧の拡張に整数変数を使用できますか?

Bashでは中括弧の拡張に整数変数を使用できますか?

次のbashスクリプトがあります。

#!/bin/bash

upperlim=10

for i in {0..10}
do
echo $i
done

for i in {0..$upperlim}
do
echo $i
done

最初のforループ(いいえupperlimループ制御の変数)はうまく機能しますが、2番目のforループ(そしてループ制御の変数upperlim)はそうではありません。 2番目のforループが正しく機能するように変更する方法はありますか?時間をいただきありがとうございます。

答え1

その理由はbashのイベントシーケンスによるものです。支柱の拡張が発生します。今後変数が展開されます。目標を達成するには、Cスタイルforループを使用する必要があります。

upperlim=10

for ((i=0; i<=upperlim; i++)); do
   echo "$i"
done

答え2

組み込み関数のみを使用して独自のスタイルでこれを実行するには、evalを使用する必要があります。

d=12

for i in `eval echo {0..$d}`
do
echo $i
done

しかし、一緒にseq

lowerlimit=0
upperlimit=12

for i in $(seq $lowerlimit $upperlimit)
do
echo $i
done

個人的にはseq

答え3

POSIX方式

携帯性を重視するならPOSIX規格の例:

i=2
END=5
while [ "$i" -le "$END" ]; do
    echo "$i"
    i=$(($i+1))
done

出力:

2
3
4
5

状況はいいえPOSIX:

答え4

for i in $(seq ${1:-1} ${2:-10}); do                                            
        echo $i                                                                 
done 

                                                                       
                                                                            
i=${1:-1}                                                                       
while (( $i <= ${2:-10} )); do                                                  
        echo $i                                                                 
        i=$(($i + 1))                                                           
done

関連情報