今日のzsh。
漢のzsh (8) これは既にシェルを超えている…… zshの算術演算 | マイナビニュース
算術計算をシェルで行うときに。
単純な整数の計算
exprを使う場合、'*'はエスケープしないといけないので注意が必要だけど
% expr 1 + 2 \* 3 7
この記法を使えばそんなのは気にしなくて大丈夫。
% echo $(( 1 + 2 * 3 )) 7
累乗の計算やビット演算はexprではできない?基本的に下の記法を使った方が良さそう。
% echo $(( 2 ** 10 )) 1024 % echo $(( 1 << 10 )) 1024
ここまではbashもできる。
小数の計算
ここからはbashではできない。
% echo $(( 2 ** 0.5 )) 1.4142135623730951
$ echo $(( 2 ** 0.5 )) bash: 2 ** 0.5 : syntax error: invalid arithmetic operator (error token is ".5 ")
bashは小数を扱えないらしい。
とはいえ
% echo $(( 1.4 )) 1.3999999999999999
とか出力されるとちょっと残念だけど。
小数を扱う際の注意
変数に代入する場合、最初に代入されるものが整数か小数かで、その後に代入されるものがどう扱われるかが変わってしまう。
% (( i = 1 )) # 整数を代入 % echo $i 1 % (( i = 3.14 )) # 小数を代入 % echo $i 3 # 整数として扱われてしまっている % % unset i # unsetする % echo $i % (( i = 3.14 )) # 最初に小数を代入 % echo $i 3.1400000000 % (( i = 1 )) # 整数を代入 % echo $i 1.0000000000 # 小数として扱われる
for文に使うことも
巷で話題のCスタイルfor文も書ける。
これはbashでも書けるけど、やはり小数が使えるのがzshの強み。
% for (( i = 0.0; i < 1.0; i += 0.05 )); do echo $i; done 0.0000000000 0.0500000000 0.1000000000 0.1500000000 0.2000000000 0.2500000000 0.3000000000 0.3500000000 0.4000000000 0.4500000000 0.5000000000 0.5500000000 0.6000000000 0.6500000000 0.7000000000 0.7500000000 0.8000000000 0.8500000000 0.9000000000 0.9500000000
まぁMacだったらjotコマンドで良いんじゃね?ってなるけど。
% jot 20 0 0.95 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95
数値処理をおこなう関数
mathfuncモジュールを読み込めばsinやcosのようなものも計算できるらしい。
まぁそこまでやるくらいだったら他の言語使うかなぁ。。