これら2つのBashラインは機能的に同じです。誰かがなぜ速いのか説明できますか?

これら2つのBashラインは機能的に同じです。誰かがなぜ速いのか説明できますか?
$ time if [[ $dir2 -ot $dir1 ]] ; then open $dir2 ; else open $dir1 ; fi
real    0m0.055s
user    0m0.023s
sys     0m0.018s

$ time  [[ $dir2 -ot $dir1 ]] && open $dir2 || open $dir1
real    0m0.000s
user    0m0.000s
sys     0m0.000s

上記では、どのディレクトリが古いかをテストし、古いディレクトリを開く2つの方法を比較しました。テスト後、&&AND演算子が||/ testと同じ機能を持つ理由とより速い理由について混乱しているようです。それぞれの利点/欠点がありますか?ifthen

ベストアンサー1

time常に次を乗算する管路

管路1つ以上のコマンド(単純または化合物)制御演算子の1つで|区切る|&

if ... fi単一の複合コマンドであり、[[ ... ]]コマンドです。それ以降の部分は&&測定されませんtimefoo && barコマンドリスト

比較する:

$ time if true; then sleep 1; fi

real    0m1.004s
user    0m0.000s
sys     0m0.000s


$ time true && sleep 1

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

# example of pipeline separated with |:
$ time true | sleep 1

real    0m1.004s
user    0m0.000s
sys     0m0.000s

すべての2番目のコマンドの時間を測定するには、コマンドを(中括弧)に入れてグループ化します。

$ time { true && sleep 1; }

real    0m1.003s
user    0m0.000s
sys     0m0.000s

おすすめ記事