세미콜론과 이중 앰퍼샌드&&의 차이점은 무엇입니까?

세미콜론과 이중 앰퍼샌드&&의 차이점은 무엇입니까?

차이점이 뭐야

echo "Hello " ; echo "world"

그리고

echo "Hello " && echo "world"

둘 다 서로 두 명령을 실행하는 것 같습니다.

답변1

echo "Hello" ; echo "world"echo "world"이전 명령의 종료 상태에 관계없이 명령이 순차적으로 실행됨을 나타냅니다 echo "Hello". 즉, echo "world"이전 명령의 성공 여부와 상관없이 실행됩니다 echo "Hello".

의 경우 echo "Hello" && echo "world"첫 번째 명령()이 성공하는 경우(즉, 상태 0으로 종료되는 경우)에만 실행됩니다 echo "world". echo "Hello"이것은 ... 불리운다단락 평가.

다음 예는 쉘이 다양한 연산자를 사용하여 명령 체인을 처리하는 방법을 보여줍니다.

$ false ; echo "OK"
OK
$ true ; echo "OK"
OK
$ false && echo "OK"
$ true && echo "OK"
OK
$ false || echo "OK"
OK
$ true || echo "OK"
$

마지막 케이스는 OK단락되어 인쇄되지 않았습니다 true.

간단히 말해서 ;구분 기호이고 &&논리적 AND이며 ||논리적 OR입니다(자세히 읽어보세요).여기).

답변2

Linux의 모든 명령은 실행이 완료되면 종료 코드를 반환합니다. 종료 코드는 특수 변수에 할당되므로 ?마지막 명령의 상태를 쉽게 확인할 수 있습니다 echo $?. 이는 스크립트에서 자주 사용됩니다. 명령이 성공적으로 완료되면 종료 코드 0이 반환되고, 실행 중에 오류가 발생하면 종료 상태는 0이 아닙니다. 아래 예를 참조하세요.

$ 에코 "안녕하세요"
안녕하세요
$에코$?
0

$ rm 파일이 존재하지 않습니다.
rm: '존재하지 않는 파일'을 삭제할 수 없습니다. 해당 파일이나 디렉터리가 없습니다.
$에코$?
1

이제 이것이 귀하의 질문으로 이어집니다. 이는 &&"이전 명령이 성공한 경우에만 다음 명령을 실행합니다. 즉, 종료 코드 0을 반환합니다"를 의미하는 특수 연산자입니다. 이전 명령이 실패할 경우에만 후자의 명령을 실행하는 역방향 연산자도 있습니다 ||. 즉, 0이 아닌 값으로 종료됩니다. 아래 예를 참조하세요.

$ echo "안녕하세요" && echo "이전 명령이 성공했습니다"
안녕하세요
이전 명령이 성공했습니다.

$ rm 존재하지 않는 파일 && echo "이 내용은 인쇄되지 않습니다."
rm: '존재하지 않는 파일'을 삭제할 수 없습니다. 해당 파일이나 디렉터리가 없습니다.

$rm 존재하지 않는 파일|| echo "그러나 이것은 표시될 것입니다"
rm: '존재하지 않는 파일'을 삭제할 수 없습니다. 해당 파일이나 디렉터리가 없습니다.
하지만 이건 보여줄 거야

편집: 질문은 둘 사이의 차이점에 관한 것이므로 &&완전한 ;답변을 얻으려면 한 명령을 다른 명령과 구분하기 위해 세미콜론을 추가해야 합니다. 종료 코드는 확인되지 않으므로 세미콜론으로 구분된 여러 명령이 있는 경우 단순히 순차적으로, 즉 서로 완전히 독립적으로 하나씩 실행됩니다.

답변3

또한@heemayl의 답변, &&(및 ||)은 쉘이 처리만 수행하도록 합니다.하나의모든 링크 명령에 대한 종료 코드입니다. 따라서 trap [...] ERR또는 줄이 있으면 set -o errexit종료 코드 처리를 수행하기 전에 모든 명령을 처리합니다.

관련 정보