Como Thomas Dickey disse, qualquer shell POSIX (ou seja, praticamente todos eles) terá $?.
Essa pergunta me interessou bastante, então eu a testei em qualquer shell em que pudesse colocar minhas mãos:
mksh
zsh
/bin/sh no meu Samsung Galaxy S5
/bin/sh no meu roteador
tcsh
ksh
dash
/bin/sh no meu sistema UNIX virtual V de 1989 ou mais
cmd.exee powershell.exeno meu computador com Windows 10
e $?trabalhou em todos estes, mas fishe cmd.exe.
Encontrou duas coisas interessantes:
1. $?funciona no Windows PowerShell!
Bem, até certo ponto. Em vez de retornar 0 ou um número maior, é apenas Truee 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. $?não funciona no shell fish.
No entanto, quando você digita $?peixe, você recebe esta mensagem:
~$ echo $?
$? is not the exit status. In fish, please use $status.
fish: echo $?
Não usei muito, mas não estou surpreso, fishparece ter sua própria linguagem shell interessante, completamente diferente bashou o que seja.