본문 바로가기

[OS]Operating System/[Linux]

[Linux] $?의 의미

728x90
반응형

$? 의 의미

bash shell에서 가장 최근에 실행한 명령어의 종료 상태(status)를 가진 변수이다.
또는 가장 최근에 실행한 함수의 return값을 가진 변수를 의미한다.

% echo hello
hello
% echo $?
0
# 최근 명령어의 종료 상태가 정상

% true
% echo $?
0
% false
% echo $?
1

주의할 점

$? 는 앞서 언급했듯이 '가장 최근 실행 결과'를 저장하는 변수임을 잊으면 안된다.

다시말해서, 가장 최근 실행 결과 코드가 무엇인지 출력하기 위해 다음과 같은 실수를 저지르면 안된다.

잘못된 사용 예

상황: shell을 통해 script 구동 후 결과에 따라 if문으로 처리하기
python3.9 ./test.py
echo "result code: $?"
if [[ $? -ne 0 ]]; then
    echo "error!"
fi

위의 예시가 잘못된 이유는 python 스크립트 실행 결과를 다른 변수에 저장하지 않고 사용했기 때문이다.

즉 $? 변수를 if문에 중복해서 사용하게 되면, 'echo' 실행 결과가 두번째 $?에 저장되므로 항상 0이 될 것이다.

잘못된 사용 예를 바로 고치면 다음과 같다.

python3.9 ./test.py
result_code = $?
echo "result code: $result_code"
if [[ $result_code -ne 0 ]]; then
    echo "error!"
fi

 

 


Reference

반응형

'[OS]Operating System > [Linux]' 카테고리의 다른 글

[Linux] shell code - [], [[]], (), (()) 차이  (0) 2023.04.30
[Linux] shell script - python exit code  (0) 2023.04.30
[Linux] IF문  (0) 2023.04.30
[Linux] tmux 사용하기  (0) 2023.04.16
[Linux] 파일 권한 의미  (0) 2023.04.15