에코$란 무엇인가요? 하다? [복사]

에코$란 무엇인가요? 하다? [복사]

내 터미널에서는 겉보기에 임의의 숫자가 인쇄됩니다 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 쉘 스크립트를 실행하는 방법을 물어볼 수도 있습니다 ;-)

관련 정보