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