「$?」(ドル疑問符)変数は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

2つの興味深い点を見つけました。

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

関連情報