Як сказав Томас Дікі, будь-яка оболонка POSIX (тобто майже всі вони) матиме $?.
Це питання мене трохи зацікавило, тому я перевірив його на будь-якій оболонці, на яку я міг би отримати свої руки:
mksh
zsh
/bin/sh на моєму Samsung Galaxy S5
/bin/sh на моєму маршрутизаторі
tcsh
ksh
dash
/bin/sh на моїй віртуальній системі UNIX 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будь-якої іншої .