$ 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
在上面,我比较了两种测试哪个目录较旧然后打开旧目录的方法。我想我只是困惑为什么测试后的&&
和运算符具有与/测试||
相同的功能,以及为什么它更快。各自有优点/缺点吗?if
then
答案1
time
总是乘以紧随其后的管道。
A管道是一个或多个命令的序列(简单或化合物) 由控制运算符之一分隔
|
或|&
。
if ... fi
是单个复合命令,并且[[ ... ]]
是一个命令。之后的部分&&
没有被测量,time
因为foo && 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
要测量所有第二个命令的时间,您可以将它们放在(大括号)中对它们进行分组:
$ time { true && sleep 1; }
real 0m1.003s
user 0m0.000s
sys 0m0.000s