2014年1月15日水曜日

bashでtestを使うと遅いよ

bashでは


if [ $a -eq 0 ] ...

と書く代わりに


if [[ $a -eq 0 ]] ...

と書ける。test([,])は外部コマンドだから評価のときに毎回forkして遅いような気がする。一方[[,]]は内部コマンドだからforkしなくて速いのではないかと思ったのでベンチマークを取ってみた。

ベンチマーク


for a in $(seq 1 100000) ; do [ 0 -eq 100 ] ; done
for a in $(seq 1 100000) ; do [[ 0 -eq 100 ]] ; done

結果

real    0m0.535s
user    0m0.517s
sys     0m0.017s

real    0m0.353s
user    0m0.347s
sys     0m0.007s

予想通り[[,]]の方がまあまあ速かった。因みに[[,]]の方では正規表現マッチなど機能が追加されている。互換性を追求するなどの理由がない限り[[,]]を使った方が良さそう。

0 件のコメント:

コメントを投稿