計算
$(( ... )) を使う。C言語とほぼ同じ構文が使用できる。(bash 拡張のように言われるが、POSIX 仕様)
http://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_06_04
C言語の signed long 型の数値しか扱えない。(符号付き32bit整数か符号付き64bit整数になっているのが一般的)
計算結果は10進数になる。
16進数は0x、8進数は0をプレフィックスで付ければ解釈される。
0パディングしていると8進数と誤解される。
sed で除去するか、expr か bc を使う。
ビルトインコマンドなので他の外部コマンド呼び出しより圧倒的に早い。
変数に$を付けなくてもよい。
x=$((x+1)) でよい。x=$(($x+1)) ではない。
Selection, iteration, and jump statements are not supported. となっていて、純粋に式しか書けない。
expr コマンドを使う方法
https://pubs.opengroup.org/onlinepubs/9799919799/utilities/expr.html
bc コマンドを使う方法
https://pubs.opengroup.org/onlinepubs/9799919799/utilities/bc.html
無限精度になっているので安全だが遅い。
結果が長すぎるとバックスラッシュが入って複数行で出力されてしまう。人が見る分にはいいが再利用が困難。
BC_LINE_LENGTH 環境変数で行の桁数を指定できる。面倒ならスクリプトの先頭で巨大な数を定義してしまうのが楽。
awk コマンドを使う方法
https://pubs.opengroup.org/onlinepubs/9799919799/utilities/awk.html
signed long 型の最大値の確認方法
Keyword: 式