まず、カウンターを増やしていません。 COUNTER=$((COUNTER))
の変更 COUNTER=$((COUNTER + 1))
に または COUNTER=$[COUNTER + 1]
増加します。
第二に、サブシェル変数を呼び出し先に逆伝播するのは難しいと思います。サブシェル内の変数は、サブシェルの外では使用できません。これらは子プロセスにローカルな変数です。
これを解決する 1 つの方法は、一時ファイルを使用して中間値を保存することです:
TEMPFILE=/tmp/$$.tmp
echo 0 > $TEMPFILE
# Loop goes here
# Fetch the value and increase it
COUNTER=$[$(cat $TEMPFILE) + 1]
# Store the new value
echo $COUNTER > $TEMPFILE
# Loop done, script done, delete the file
unlink $TEMPFILE
COUNTER=1
while [ Your != "done" ]
do
echo " $COUNTER "
COUNTER=$[$COUNTER +1]
done
テスト済みの BASH:Centos、SuSE、RH
COUNTER=$((COUNTER+1))
は、現代のプログラミングでは非常に扱いにくい構造です。
(( COUNTER++ ))
より「モダン」に見えます。
も使用できますlet COUNTER++
読みやすさが向上すると思われる場合。ときどき、Bash はあまりにも多くの方法を提供します (おそらく Perl の哲学だと思います) が、おそらく Python の「正しい方法は 1 つしかない」方が適切かもしれません。それがあったとしても、それは議論の余地のある声明です!とにかく、(この場合の)目的は、変数をインクリメントすることだけではなく、(一般的なルール)他の誰かが理解してサポートできるコードを書くことでもあることをお勧めします。適合性は、それを達成するための長い道のりです。
HTH