에코$?다음 시나리오에서는 반환 값인 1이 표시되지 않습니다.
echo "int main() { return 1; }" > foo.c
gcc foo.c && ./a.out && echo $?
하지만,에코$?프로그램이 0을 반환할 때만 작동합니다. 왜 이런거야?
참고: 다른 작업을 수행하는 경우에코$?위의 코드 후에 원하는 출력 1을 얻을 수 있습니다.
답변1
연산자 &&
는 부울 값입니다.그리고단락 평가 기능 포함. 즉, 첫 번째 명령이 성공한 경우 0
에만 두 번째 명령을 실행합니다 (즉, return ). 일반적인 사용법은 다음과 같습니다.
tar xf file.tar && rm file.tar
추출이 성공한 경우에만 파일이 삭제됩니다.
귀하의 스크립트에는 좋은 예도 포함되어 있습니다.
gcc foo.c && ./a.out
gcc
프로그램은 성공한 경우에만 실행을 시도합니다.
$?
성공 여부에 관계없이 표시 하려면 a.out
다음과 같이 작성할 수 있습니다.
gcc foo.c && { ./a.out ; echo $? ; }
{...}
컴파일이 성공하면 모두 실행되도록 하는 이러한 그룹 명령입니다.