이 두 Bash 라인은 기능적으로 동일합니다. 누군가 왜 더 빠른지 설명할 수 있습니까?

이 두 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

위에서 나는 어느 디렉토리가 더 오래된지 테스트한 다음 이전 디렉토리를 여는 두 가지 방법을 비교했습니다. 테스트 후 &&AND 연산자가 ||/test와 동일한 기능을 갖는 이유와 더 빠른 이유에 대해 혼란스러워하는 것 같습니다. 각각의 장점/단점이 있나요?ifthen

답변1

time항상 다음을 곱한다관로.

관로하나 이상의 명령(단순 또는화합물) 제어 연산자 중 하나로 구분 |하거나 |&.

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

관련 정보