내 터미널에서는 겉보기에 임의의 숫자가 인쇄됩니다 127
. 나는 그것이 특정 변수의 값을 인쇄하고 있다고 생각하고 의심을 확인하기 위해 새로운 변수를 정의했습니다 v=4
. 다시 실행하면 출력이 echo $?
나에게 주어졌습니다 .0
4가 답이 될 것이라고 기대했기 때문에 혼란스럽습니다.
답변1
에서 man bash
:
$? 가장 최근에 실행된 전경 파이프의 종료 상태로 확장됩니다.
echo $?
마지막 명령의 종료 상태를 반환합니다. 당신이 얻는 것은 127
(아마도) 일부 오류와 함께 종료된 마지막 실행 명령의 종료 상태입니다. 명령은 종료 상태 0
(대부분)로 성공적으로 완료되면 종료됩니다. 이전 명령이 오류 없이 완료되었기 0
때문에 마지막 명령이 출력을 제공했습니다 .echo $v
명령을 실행하면
v=4
echo $v
echo $?
다음과 같은 출력을 얻게 됩니다.
4 (from echo $v)
0 (from echo $?)
또한 시도해 보십시오:
true
echo $?
당신은 얻을 것이다 0
.
false
echo $?
당신은 얻을 것이다 1
.
명령 true
은 아무것도 하지 않고 상태 코드로 종료합니다 0
. false
명령은 아무 것도 하지 않고 실패를 나타내는 상태 코드(예: 상태 코드 1
)로 종료됩니다.
답변2
$?
이전 명령의 작동 방식(종료 상태 확인)을 기반으로 수행할 작업을 결정하는 데 쉘스크립트에서 유용합니다. 종료 상태는 다음과 같을 것으로 예상할 수 있습니다.0
이전 명령이 유효하면(성공적으로 완료됨) 0이 아닌 값이고, 그렇지 않으면 값입니다.
데모 예:
#!/bin/bash
patience=3
read -t "$patience" -p "Press 'Enter' if you run Unix or Linux, otherwise press 'ctrl+d' "
status="$?"
if [[ $status -eq 0 ]]
then
echo "That's great :-)"
elif [[ $status -eq 1 ]]
then
echo "(exit status=$status)
You are welcome to try Unix or Linux :-)"
else
echo "(exit status=$status)
You did not answer within $patience seconds. Anyway :-)"
fi
echo "'Unix & Linux' is a question/answer web site for
Unix and Linux operating systems"
Unix나 Linux 없이 bash 쉘 스크립트를 실행하는 방법을 물어볼 수도 있습니다 ;-)