종료 상태 동등성 테스트

종료 상태 동등성 테스트

다음 두 명령 목록은 이식 가능한 것과 동일합니까?

$foo; echo $? #(1)

그리고

$foo && echo 0 || echo $? #(2)

추신

다음과 같이 정의된 명령을 생각해 보세요 exit-status.

#!/bin/sh
exit "$1"

POSIX 표준은 다음 동작을 금지합니까?

> exit-status 2 && echo "impossible branch"; echo $?
1

그렇지 않은 경우 POSIX 호환 셸은 두 개의 상위 명령 목록을 동일시하지 못할 수 있습니다. 휴대성이 없다는 말은 아닌데...

답변1

두 명령줄 모두 이식 가능합니다. 그리고 둘의 효과는 동일합니다.

두 번째에 관해서: $foo실패 하면 echo 0평가되지 않으므로 echo $?마지막 명령의 종료 상태가 인쇄됩니다. 즉 $foo.

논리 연산자는 왼쪽 결합형입니다. 즉, 두 번째 명령줄은 다음과 같습니다.

$ { $foo && echo 0 } || echo $? 

(첫 번째는 $쉘 프롬프트를 나타냅니다.)

쉘 명령 언어표준화된 명령 목록, 운영자 선호도 등.

섹션 2.9.3쉘 명령 언어또한 && 연산자의 종료 상태 의미를 지정합니다.

종료 상태

AND 목록의 종료 상태는 목록에서 실행된 마지막 명령의 종료 상태여야 합니다.

포스트 스크립트와 관련하여 예, POSIX에서는 허용하지 않습니다.

관련 정보