POSIX 쉘에서 다음 예제 및 해당 출력을 참조하십시오.
false;echo $?
또는false || echo 1
:1
false;foo="bar";echo $?
또는foo="bar" && echo 0
:0
foo=$(false);echo $?
또는foo=$(false) || echo 1
:1
foo=$(true);echo $?
또는foo=$(true) && echo 0
:0
/programming/6834487/what-is-the-variable-in-shell-scripting 에서 가장 투표가 많은 답변에서 언급했듯이 :
$?
마지막으로 실행 된 명령의 반환 값을 찾는 데 사용됩니다.
이 경우에는 약간 오해의 소지가 있으므로 해당 스레드의 게시물에 인용 된 POSIX 정의를 가져 오십시오.
? 가장 최근 파이프 라인의 10 진수 종료 상태로 확장됩니다 (파이프 라인 참조).
따라서 할당 자체가 종료 값이 0 인 명령 (또는 파이프 라인 부분)으로 계산되지만 할당 오른쪽 앞에 적용되는 것처럼 보입니다 (예 : 여기에서 명령 대체 호출).
이 행동이 실제적인 관점에서 어떻게 의미가 있는지 알지만 과제 자체가 그 순서대로 계산되는 것은 다소 특이한 것 같습니다. 왜 나에게 이상한지 더 명확하게하기 위해 과제가 함수라고 가정 해 봅시다.
ASSIGNMENT( VARIABLE, VALUE )
다음 foo="bar"
것
ASSIGNMENT( "foo", "bar" )
그리고 foo=$(false)
같은 것
ASSIGNMENT( "foo", EXECUTE( "false" ) )
즉, 먼저EXECUTE
실행 되고 나중에 만 실행되지만 여전히 여기서 중요한 상태입니다. ASSIGNMENT
EXECUTE
평가가 정확합니까, 아니면 오해 / 누락이 있습니까? 이러한 행동을 "이상한"것으로 보는 올바른 이유가 있습니까?
false;foo="bar";echo $?
실행 된 마지막 실제 명령했다 때 항상 0을 반환 false
?" 기본적으로 과제는 종료 코드와 관련하여 특별하게 작동합니다. 과제의 오른쪽 부분으로 실행 된 것이 아니기 때문에 종료 코드는 항상 0입니다.