Как сказал Томас Дики, любая оболочка POSIX (т.е. почти все из них) будет иметься $?
.
Этот вопрос меня немного заинтересовал, поэтому я проверил его на любой оболочке, которую смог достать:
mksh
zsh
/bin/sh
на моем Samsung Galaxy S5
/bin/sh
на моем роутере
tcsh
ksh
dash
/bin/sh
на моей виртуальной UNIX System V с 1989 года или около того
cmd.exe
и powershell.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
.
Тем не менее, когда вы вводите $?
рыбу, вы получаете это сообщение:
~$ echo $?
$? is not the exit status. In fish, please use $status.
fish: echo $?
Я не использовал это много, но я не удивлен, у меня, fish
кажется, есть свой собственный интересный язык оболочки, полностью отличающийся от bash
чего-либо.