「$」ですか?(ドル疑問符)Bashシェルでのみ使用可能な変数?


10

ではBash、シェル、私はを介してコマンド終了ステータスを取得することができます$?変数:

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

Bashシェルでのみ使用できますか?または、他のシェルでも使用できますか?


8
任意のPOSIXシェルで使用できます。これは特別なパラメーター
cuonglm

回答:


19

$?終了コードPOSIXに続く任意のシェルに共通であり、に記載されている2.5.2特殊パラメータ

?
最新のパイプライン(参照の小数点以下の終了ステータスに展開パイプラインを)。


5
POSIXシェルだけでなく、Bourneシェルを含むすべてのBourneのようなシェル(私がそれを導入したものだと$r私は信じていますが、Masheyシェルは私が信じているようにそれを持っていました)。事実上すべてのUnixライクな70年代後半でのUnix V7以降のシステムのSHだ、他のほとんどのシェル(cshの、tcshの、魚、RCが)としてそれを持っているので$status
ステファンChazelas

2
そして多くのスクリプト言語:Perl、Rubyなど
OrangeDog

13

Thomas Dickeyが言ったように、あらゆる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コンピュータ上

そして$?これらのすべてで働いていたが、fishcmd.exe

2つの興味深いものが見つかりました:

1. $?Windows PowerShellで動作します!

まあ、ある程度まで。代わりに、0以上の数を返すので、それだけだTrueFalse

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ます。


ほとんどのシェル(fish、csh、tcsh、rc、zsh)$statusは、より簡単で読みやすいIMOを使用しています。(Unixシェルの中で)Bourneのようなシェルだけが$?AFAIKを使用します。
ステファンChazelas

3
ただあなたが読んでいる方法に依存します。$?「sh ##が起こった?」と精神的に読んだ その後、私はこの特別な変数の意味を決して忘れませんでした:)

2
@nwildner笑!今は決して忘れないでしょう!
hanetzer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.