; 대신 &&를 사용하는 이유는 무엇입니까? 같은 줄에 명령을 내릴 수 있습니까?


30

리눅스가 유닉스가 아닌 전문가가 아니기 때문에 같은 줄에 2 개의 명령을 묶는 두 가지 방법의 차이점이 무엇인지 궁금합니다. 이 간단한 예제에서는 출력에 차이가 없습니다.

Pete$date ; time
Sun Mar 17 19:37:20 EDT 2013

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

Pete$date &&time
Sun Mar 17 19:37:46 EDT 2013

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

이로 인해 아무런 문제가 발생하지 않았습니다. 그냥 궁금합니다 ..

답변:


43

&&논리적 인 'and'입니다. 첫 번째 인수는 평가되고 두 ​​번째 인수는 첫 번째 인수가 true를 반환하는 경우에만 평가됩니다. 그 이유는 "거짓 AND 무언가"가 항상 거짓이므로이 경우 두 번째 인수를 평가할 필요가 없습니다.

따라서 &&첫 번째 명령이 오류를보고하면 ( true종료 코드로 표시되며 0오류가 없음을 나타냄) 두 번째 명령이 실행 되지 않아야합니다. 반대로 ;첫 번째 명령의 결과가 무엇이든 두 명령을 모두 실행합니다.

결론 : 명령을 연결 &&하는 것은 좋은 습관입니다. 반대로 ;무언가 잘못되면 후속 명령을 실행하지 않습니다.


0의미 입니까, true아니면 그 0의미입니까? 오류가 있습니까?
Michael Butler

1
@MichaelButler : 0의미 true합니다. 설명을 추가했습니다.
아지 무트

26

;

이전 종료 상태에 관계없이 명령을 순차적으로 실행합니다.

# sh -c "exit 0" ; echo "2nd command"
2nd command
# sh -c "exit 1" ; echo "2nd command"
2nd command

&&

논리 AND

이전 명령이 성공한 경우에만 다음 명령을 실행하십시오 (종료 상태는 0).

# sh -c "exit 0" && echo "2nd command"
2nd command
# sh -c "exit 1" && echo "2nd command"
#

||

논리 OR

이전 명령이 실패한 경우에만 다음 명령을 실행하십시오 (종료 상태가 아닌 경우 0 ).

# sh -c "exit 0" || echo "2nd command"
#
# sh -c "exit 1" || echo "2nd command"
2nd command

6
또한, sh -c "exit 0"교체 할 수 있습니다 true이러한 예에서, 및 sh -c "exit 1"false.
Flimm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.