명령이 잘못되었지만 종료 코드가 0인 이유는 무엇입니까?

명령이 잘못되었지만 종료 코드가 0인 이유는 무엇입니까?

Bash 스크립트에서 다양한 것을 테스트하고 있는데 설명할 수 없는 문제에 부딪혔습니다.

0이 아닌 다른 종료 코드를 얻기 위해 의도적으로 잘못된 명령을 썼는데, 어쩐지 여전히 0이 나오는 것 같습니다.

내가 실행하는 코드는 다음과 같습니다.

USER_NAME=$(id -uns)

if [[ ${?} -ne 0 ]]
then
    echo "Your command failed to execute with exit code ${?}"
    exit 1
fi
echo "Your username is ${USER_NAME}"

내 코드의 출력은 다음과 같습니다

id: 알 수 없는 옵션 -- s

자세한 내용을 보려면 "id --help"를 시도하십시오.

종료 코드 0으로 인해 명령이 실패했습니다.

당신의 사용자 이름은

어떻게든 echo 명령의 종료 코드를 표시하는 것 같나요? 그럼에도 종료코드가 0인데 왜 if 문을 입력하는 걸까요?

그렇다면 표시되어야 하는 실제 종료 코드를 표시하려면 어떻게 해야 합니까?

답변1

코드의 명령문에서 if종료 상태를 얻으십시오.인쇄테스트의 종료 상태입니다 [[ ${?} -ne 0 ]]. 값은 $?항상 가장 최근에 실행된 명령의 종료 상태이며, 적어도 값이 $?결과로 설정되는 한 테스트는 명령으로 간주됩니다.

종료 상태를 인쇄하려면 id값이 변경되지 않는 변수에 할당하고,

id -uns
err=$?

if [[ $err -ne 0 ]]; then
    printf 'id failed with code %d\n' "$err" >&2
    exit 1
fi

관련 정보