"$?"(달러 물음표) 변수는 Bash 셸에서만 사용할 수 있나요?

"$?"(달러 물음표) 변수는 Bash 셸에서만 사용할 수 있나요?

셸 에서는 Bash변수를 통해 명령 종료 상태를 얻을 수 있습니다 $?.

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

Bash 쉘에서만 작동합니까? 아니면 다른 쉘에서도 사용할 수 있나요?

답변1

종료 코드는 $?모든 POSIX 호환 셸에 공통적이며 다음과 같습니다.2.5.2 특수 매개변수:

?
가장 가까운 파이프의 소수점 종료 상태로 확장합니다(참조:관로).

답변2

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

이 질문이 흥미로워서 손에 넣을 수 있는 모든 셸에서 테스트했습니다.

  • mksh
  • zsh
  • /bin/sh내 삼성 갤럭시 S5에서
  • /bin/sh내 라우터에서
  • tcsh
  • ksh
  • dash
  • /bin/sh내 1989년경 가상 UNIX System V에서
  • cmd.exepowershell.exe내 Windows 10 컴퓨터 에서

그리고 $?이 모든 일을 해왔지만, fish그리고 cmd.exe.

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

1. $?Windows PowerShell에서 작업하세요!

글쎄요. 0 이상의 숫자를 반환하지 않고 합계를 반환 True합니다 False.

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.

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

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

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

관련 정보