やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Bashにおけるインクリメントの方法

様々ある。

参考

方法

  • ((count++))
  • let count++
  • count=\expr $count + 1``

((count++))

OK

count=0
while [ $count -lt 3 ]; do
    ((count++))
done

count=$((++count))の部分は、以下のように置き換えることができる。

  • : $((count++))
  • count=$((++count))
  • count=$((count+1))
  • ((count++)) (事前に数値として初期化(count=0等)した場合のみ)

実行速度が速い。表記も短い。ただし、以下のようにわずかな表記の違いでバグる罠が多数ある。

NG 1

count=0
while [ $count -lt 3 ]; do
    count=$((count++))
done

無限ループになる。インクリメント前の値が代入されてしまうため。

NG 2

count=0
while [ $count -lt 3 ]; do
    $((++count))
done

以下のエラーとなる。数値がそのままコマンドとして認識されてしまうため。

コマンドが見つかりません

NG 3

count=0
while [ $count -lt 3 ]; do
    count+=1
done

文字列結合になってしまう。

他コマンド

実行速度が遅い。

  • expr
  • let

let

count=0
let count++

let a++は以下のように置き換え可。

  • let count=$count+1
  • let count=($count + 1)

expr

count=0
count=`expr $count + 1` 

実行速度が遅い上に、表記が冗長。