BASHで計算

/ Linux/Unix / Comment[0]
出来たんだね

$ echo $((1+2+3))
6


exprでいいじゃんと思った人
$(())はBASHの内部コマンドだけど、exprは外部コマンドなわけで、毎回/usr/bin/exprを呼び出すシステムコールが発生する。
ちょっとした計算ならexprでも問題ないけど、シェルスクリプトなどで多くの計算を連続で実行すると、処理速度の差が目立ってくる。

$ time for i in `seq 1000`; do expr $i + 1; done >/dev/null

real 0m1.513s
user 0m0.072s
sys 0m0.324s

$ time for i in `seq 1000`; do echo $(($i + 1)); done >/dev/null

real 0m0.030s
user 0m0.028s
sys 0m0.000s

exprは1.513秒もかかったのに対し、$(())の方は0.030秒でおわた。
timeコマンドのsys項目を見てみると、$(())は0に対し、exprの方はシステムコールによる0.324秒のロスが発生していることが明らか。
関連記事

コメント

:
:
:
:
:
管理人のみ表示を許可