`$?`는 무엇입니까? 변수입니까?


23

문제는 매우 간단합니다. 를 사용하여 이전 명령의 종료 코드를 얻을 수 있습니다 $?. 그러나 정확히 무엇입니까?

변수 이름에 특수 문자를 사용할 수 없으므로 변수가 아니라고 생각합니다 _.

foo?foo=10

오류가 발생합니다 : foo?foo=10: command not found

변수가 아니면 무엇입니까? 같은 다른 사람이 있습니까?


답변:


23

무엇입니까?

$? 명령, 함수 또는 스크립트 자체의 종료 상태를 저장하는 내장 변수입니다.

$?마지막으로 실행 된 명령의 종료 상태를 읽습니다. 함수가 리턴 된 후 함수 $?에서 마지막으로 실행 된 명령의 종료 상태를 제공합니다. 이것은 Bash가 함수에 "반환 값"을주는 방식입니다. 0성공시 또는 1 - 255오류시 범위의 정수를 리턴합니다 .

좋아하는 사람도 있습니까?

예, bash에는 몇 가지 내장 변수가 있습니다. 여기 에서 목록을 볼 수 있습니다 . 참조 : http://www.tldp.org/LDP/abs/html/exit-status.html


1
bash 쉘에서만 사용할 수 있습니까?
daltonfury42

4
@ daltonfury42 아니, 시도는 Bourne 쉘과 약간의 호환성을 가지고 있다는 어떤 쉘을 지원합니다 (포함 dash, ksh, zsh, 다른 사람의 사이에서).
muru

2
csh와 fish $status는 같은 목적으로 사용 합니다
glenn jackman

22

$?변수이지만 특별한 문자이므로 특수 문자가 허용됩니다. ($?)가장 최근에 실행 된 포 그라운드 파이프 라인의 종료 상태로 확장됩니다.

쉘은 여러 가지 매개 변수를 특별히 처리합니다. 이 매개 변수는 참조 만 가능합니다. 그들에게 할당은 허용되지 않습니다 :

Variable    Meaning
$0          Filename of script
$1          Positional parameter #1
$2 - $9     Positional parameters #2 - #9
${10}       Positional parameter #10
$#          Number of positional parameters
"$*"        All the positional parameters (as a single word) *
"$@"        All the positional parameters (as separate strings)
${#*}       Number of positional parameters
${#@}       Number of positional parameters
$?          Return value
$$          Process ID (PID) of script
$-          Flags passed to script (using set)
$_          Last argument of previous command
$!          Process ID (PID) of last job run in background

* Must be quoted, otherwise it defaults to $@.

출처 :


2
"$*"는 단일 단어로서의 모든 위치 매개 변수 일뿐만 아니라 단일 단어 IFS로서의 첫 문자로 분리 된 모든 위치 매개 변수 입니다. 인용되지 않은 경우 결과가 필드 분할에 영향을 미치므로 $@, 인용되지 않은 경우에 효과 가 사용됩니다.
muru

1
인용 부호가없는 $ @와 $ *는 모두 단어 분할이 적용 되므로 동일 합니다. "$ @"는 개별 매개 변수에 IFS의 문자가 포함되어 있더라도 위치 매개 변수의 단어 분할을 유지합니다.
kojiro

1
쉘에 언제 사용되는지에 대한 참조가 있습니까? 펄이 그것들을 쉘 스크립팅에서 가져 왔는지 궁금합니다.
simbabque

이것은 Perl보다 수십 년 (또는 적어도 몇 년) 이전입니다. 많은 Perl 구문은 쉘 구문의 영향을 받았습니다. (Perl은 1987 년에 태어 났으며이 구문의 많은 부분은 원래 Bourne shell (1977)에서 나왔습니다. $ _가 소개되었을 때 100 %는 아니지만 1987 년 이전에는 거의 확실했습니다.
Popup

6

$?A는 특별한 쉘 파라미터 (변수).

일반적으로 모든 사용자 정의 변수는 문자 클래스의 문자 만 사용하여 이름을 지정해야합니다 ( [:alnum:]예 :로 [a-zA-Z0-9_]시작할 수 없음 [0-9]).

간단히 말해, 이전 명령의 종료 코드 (성공 또는 실패 여부)를 제공하는 셸 자체의 내부 기능으로 간주 될 수 $?있는 특수 변수 ( 이 중 몇 가지 가 있습니다)가 있습니다.

변수에 대해 더 많이 알기 위해 이것을 읽을 수 있습니다 .


4

$?bash의 특수 변수는 항상 마지막으로 실행 된 명령 의 리턴 / 종료 코드 를 보유합니다 .

를 실행하여 터미널에서 볼 수 있습니다 echo $?.

리턴 코드는 [0; 255].
리턴 코드는 0일반적으로 모든 것이 정상임을 의미합니다.
다른 값은 오류를 나타냅니다. 대부분의 응용 프로그램은 1사용자 정의 값을 반환 합니다. 명령을 찾지 못한 경우 변수에는 일반적으로127

이 변수를 특정 값으로 설정하려는 경우, bash -c "exit 5"예를 들어 리턴 코드를 리턴하기 위해 이를 쉽게 수행 할 수 있습니다 5.


쉘 기능은 반드시 포크하지 않고 종료 상태를 설정하는 POSIX 호환 방법입니다. setstatus() { return 5; }
kojiro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.