"$?" (달러-물음표) 변수는 Bash 셸에서만 사용할 수 있습니까?


10

에서 Bash쉘, 나는 통해 명령의 종료 상태를 얻을 수있는 $?변수를 :

# ps -ef | grep "haha"
root     15439 15345  0 23:02 pts/0    00:00:00 grep --color=auto haha
# echo $?
0

Bash 셸에서만 사용할 수 있습니까? 아니면 다른 껍질에도 사용할 수 있습니까?


8
POSIX 쉘에서 사용할 수 있으며 특별한 매개 변수
cuonglm

답변:


19

$?종료 코드는 POSIX를 다음과 어떤 쉘에 공통이며, 설명되어 2.5.2 특수 파라미터 :

?
가장 최근 파이프 라인의 10 진수 종료 상태로 확장됩니다 ( 파이프 라인 참조 ).


5
POSIX 쉘뿐만 아니라 Bourne 쉘을 포함하여 모든 Bourne 유사 쉘 (내가 그것을 소개 한 것으로 $r생각합니다. Mashey 쉘은 내가 생각 한대로 그것을 가지고 있습니다 ). 그래서 그것은 70 년대 후반의 Unix V7 이후 거의 모든 유닉스 계열 시스템의 sh입니다. 대부분의 다른 쉘 (csh, tcsh, fish, rc)은 그것을 가지고 있습니다 $status.
Stéphane Chazelas

2
그리고 많은 스크립트 언어들 : Perl, Ruby 등
OrangeDog

13

Thomas Dickey가 말했듯이 모든 POSIX 쉘 (즉, 거의 모든 것)은 $?.

이 질문은 나에게 꽤 흥미가 있었기 때문에, 나는 내 손을 잡을 수있는 쉘에서 테스트했습니다.

  • mksh
  • zsh
  • /bin/sh 내 삼성 갤럭시 S5
  • /bin/sh 내 라우터에서
  • tcsh
  • ksh
  • dash
  • /bin/sh 1989 년 이후의 가상 UNIX System V에서
  • cmd.exe그리고 powershell.exe내 Windows 10 컴퓨터에서

그리고 $?이 있지만 모두에서 근무 fish하고 cmd.exe.

흥미로운 두 가지를 발견했습니다.

1. $?Windows PowerShell에서 작동합니다!

글쎄요. 0 이상의 숫자를 반환하는 대신 그냥 TrueFalse입니다.

PS C:\WINDOWS\system32> echo $?
True
PS C:\WINDOWS\system32> gfdhgfhfdgfdg
gfdhgfhfdgfdg : The term 'gfdhgfhfdgfdg' is not recognized as the name of a cmdlet, ...(big long error output).....
PS C:\WINDOWS\system32> echo $?
False

2. $?쉘에서 작동하지 않습니다 fish.

그러나 $?물고기 를 입력 하면 다음 메시지가 나타납니다.

~$ echo $?
$? is not the exit status. In fish, please use $status.
fish: echo $?

나는 그것을 많이 사용하지는 않았지만 놀랍지 않습니다. fish그 자체의 흥미로운 쉘 언어가있는 것 같습니다 bash.


대부분의 쉘 (fish, csh, tcsh, rc, zsh) $status은 훨씬 간단하고 읽기 쉬운 IMO 인 것을 사용합니다. Bourne과 같은 쉘 (유닉스 쉘 중) 만 $?AFAIK를 사용 합니다.
Stéphane Chazelas

3
읽는 방법에 따라 다릅니다. 나는 정신적으로 읽기 $?"SH는 ## 일이?"로 그리고 그 후, 나는이 특별한 변수의 의미를 잊지 않았다 :)

2
@nwildner lol! 나는 지금 그것을 잊지 못할 것입니다!
hanetzer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.