$의 의미는 무엇입니까? 쉘 스크립트에서?


답변:



26

Cjm의 대답 은 정확하지만 $?셸 스크립트에서 어리석은 방식으로 사용할 수 있으므로 이에 대해 경고하고 싶습니다. 많은 불량 쉘 스크립트에는 반복되는 코드 패턴이 있습니다.

run_some_command
EXIT_STATUS=$?

if [ "$EXIT_STATUS" -eq "0" ]
then
    # Do work when command exists on success
else
    # Do work for when command has a failure exit
fi

가능하면 (가독성에 대한 우려가있는 경우가 있음)이 상황을 다르게 코딩해야합니다.

if run_some_command
then
    # Do work when command exists on success
else
    # Do failure exit work
fi

후자의 사용법은 더 빠르며 온도 변수에 해당하는 양으로 쉘의 변수 네임 스페이스를 오염시키지 않으며 종종 인간에게 훨씬 더 읽기 쉽고 "긍정적 논리"의 사용, 부정없이 조건을 작성하는 연습을 장려합니다. 대부분의 상황에서 단순성. $?대부분을 사용하여 제거합니다 .


5
0 또는 1 이상의 가능성이있는 경우 더 복잡한 구문이 필요합니다. 프로그램은 종종 종료 코드를 통해 유용한 정보를 전달합니다. 또한 나중에 코드에서 해당 값을 다시 사용해야하는 경우에도 유용합니다 (예 : 로깅).
mattdm

3

cjm이 말한 것 외에도 의 값 $?이 0이면 이전 프로세스가 정상적으로 (또는 성공적으로) 종료되었습니다. 그렇지 않으면 약간의 오류가있었습니다.


8
항상 오류를 나타내는 것은 아닙니다. diff비교 된 파일이 동일하면 0으로 종료하고, 파일이 다르면 1로 종료하고 2는 오류입니다.
Shawn J. Goff

2
오류를 나타내지 않습니다 . 그건 단지 이전 명령의 종료 상태. "정상 종료 인 경우 0"은 규칙입니다 (EXIT_SUCCESS / EXIT_FAILURE)
aviraldg

3

$?-마지막으로 실행 된 명령의 종료 상태.

$0-현재 스크립트의 파일 이름입니다.

$#-스크립트에 제공된 인수 수

$$현재 쉘의 프로세스 번호. 쉘 스크립트의 경우, 이것이 실행되는 프로세스 ID입니다.


0

$? 프롬프트에서 마지막 실행 명령의 실행 상태를 제공하십시오. 값 '0'은 명령이 성공적으로 실행되었으며 '1'이 성공하지 못했음을 나타냅니다.


2
대화식 프롬프트뿐만 아니라 스크립트에서도, 0이 아닌 값은 실패를 나타냅니다.
Kusalananda

-3

$?실행 된 명령의 종료 상태를 결정합니다. $(예를 들어 숫자이어서 $1, $2쉘 스크립트의 파라미터 등)을 나타낸다.


당신은 정답 을 읽을 수 있습니다 ...
jasonwryan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.