다음 두 명령 목록은 이식 가능한 것과 동일합니까?
$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에서는 허용하지 않습니다.