./a.out && echo $?return = 0인 경우에만 반환 값을 인쇄합니다.

./a.out && echo $?return = 0인 경우에만 반환 값을 인쇄합니다.

에코$?다음 시나리오에서는 반환 값인 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 $? ; }

{...}컴파일이 성공하면 모두 실행되도록 하는 이러한 그룹 명령입니다.

관련 정보