bashでexprを使わずにインクリメント処理する。

オライリー詳解 シェルスクリプトを読んでいたらexprは実装が好ましくないので使わない方がよいとありました。exprを使わないでどうやってインクリメント処理とかを行うのかと思っていたら、単純に変数の上書きでいけるようです。注意点としては(())と括弧が二重になっていること。1重ではエラーとなります。

サンプルソース

#!/usr/bin/sh
i=1
while true
do 
    echo $i
    # iを$i+1で上書きする
    i=$((i+1)) 
    sleep 1
done

実行結果

1
2
3
4
5
6
^C