Linux test、[]、[[]]のまとめと性能比較

1773 ワード

➜  time (for m in {1..100000}; do test -d .; done;)
( for m in {1..100000}; do; test -d .; done; )  0.21s user 0.15s system 98% cpu 0.366 total

➜  time (for m in {1..100000}; do [ -d . ]; done;)
( for m in {1..100000}; do; [ -d . ]; done; )  0.23s user 0.15s system 98% cpu 0.388 total

➜  time (for m in {1..100000}; do [[ -d . ]]; done;)
( for m in {1..100000}; do; [[ -d . ]]; done; )  0.07s user 0.07s system 97% cpu 0.141 total

➜      time (for m in {1..1000000}; do test -d .; done;)
( for m in {1..1000000}; do; test -d .; done; )  2.24s user 1.51s system 95% cpu 3.927 total

➜  time (for m in {1..1000000}; do [[ -d . ]]; done;)
( for m in {1..1000000}; do; [[ -d . ]]; done; )  0.68s user 0.59s system 99% cpu 1.282 total

➜  time (for m in {1..1000000}; do [[ -d . ]]; done;)
( for m in {1..1000000}; do; [[ -d . ]]; done; )  0.70s user 0.60s system 99% cpu 1.310 total

➜  time (for m in {1..1000000}; do [ -d . ]; done;)
( for m in {1..1000000}; do; [ -d . ]; done; )  2.36s user 1.48s system 99% cpu 3.855 total

➜  time (for m in {1..1000000}; do [ -d . ]; done;)
( for m in {1..1000000}; do; [ -d . ]; done; )  2.42s user 1.50s system 99% cpu 3.938 total

➜  time seq 10
1
2
3
4
5
6
7
8
9
10
seq 10  0.00s user 0.00s system 69% cpu 0.003 total

注意:[]はtestの簡略式で、[]式では、一般的な>、<エスケープ文字が必要で、文字列サイズの比較を表し、acillコードの位置を比較します.<>演算子を直接サポートせず、論理演算子|&&を-a[and]-o[or]で表す必要があります.
注:[[]]演算子は[]演算子の拡張にすぎません.<,>シンボル演算をサポートするには、エスケープ文字は必要ありません.文字列でサイズを比較します.論理演算子:|&&
bashの条件式にはtest,[]および[]]の3つのほぼ等価な記号とコマンドがあります.通常、if[]を使うのに慣れています.thenのような形式.一方,[]]の出現は,ABSによると,><のような演算子を互換化するためである.それらの性能を比較すると,[[]]が最も速いことが分かった.
低バージョンbashとshの互換性を考慮しない場合,[]]を用いるのは互換性が強く,性能が比較的速いため,条件演算を行う際にこの演算子を用いることができる.