![이 두 Bash 라인은 기능적으로 동일합니다. 누군가 왜 더 빠른지 설명할 수 있습니까?](https://linux55.com/image/175842/%EC%9D%B4%20%EB%91%90%20Bash%20%EB%9D%BC%EC%9D%B8%EC%9D%80%20%EA%B8%B0%EB%8A%A5%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EB%8F%99%EC%9D%BC%ED%95%A9%EB%8B%88%EB%8B%A4.%20%EB%88%84%EA%B5%B0%EA%B0%80%20%EC%99%9C%20%EB%8D%94%20%EB%B9%A0%EB%A5%B8%EC%A7%80%20%EC%84%A4%EB%AA%85%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
$ 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와 동일한 기능을 갖는 이유와 더 빠른 이유에 대해 혼란스러워하는 것 같습니다. 각각의 장점/단점이 있나요?if
then
답변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