$の意味は何ですか?シェルスクリプトで?


回答:



26

Cjmの答えは正しいですが$?、シェルスクリプトで馬鹿げた方法で使用することができます。私はそれに対して警告したいと思います。多くの不良シェルスクリプトには、コードの繰り返しパターンがあります。

run_some_command
EXIT_STATUS=$?

if [ "$EXIT_STATUS" -eq "0" ]
then
    # Do work when command exists on success
else
    # Do work for when command has a failure exit
fi

可能な限り(読みやすさの問題が侵入する場合)、この状況を異なる方法でコーディングする必要があります。

if run_some_command
then
    # Do work when command exists on success
else
    # Do failure exit work
fi

この後者の使用はより高速で、シェルの変数名前空間を一時変数に汚染せず、人間にとってはるかに読みやすいことが多く、「正論理」の使用を奨励します。ほとんどの状況でシンプル。$?大部分の使用を廃止します。


5
0または1よりも多くの可能性がある場合、より複雑な構文が必要です。プログラムは多くの場合、終了コードを介して有用な情報を伝達します。また、コードで後でその値を再利用する必要がある場合にも役立ちます(たとえば、ログ記録のため)。
mattdm

3

cjmが言ったことに加えて、値$?が0の場合、前のプロセスは正常に(または正常に)終了しました。それ以外の場合、エラーが発生しました。


8
常にエラーを通知するわけではありません。diff比較されたファイルが同じ場合は0で終了し、異なる場合は1で終了し、2はエラーです。
ショーンJ.ゴフ

2
エラーを通知することはありません。それはだだけ前のコマンドの終了ステータス。「正常終了の場合は0」は慣例です(EXIT_SUCCESS / EXIT_FAILURE)
aviraldg

3

$?-最後に実行されたコマンドの終了ステータス。

$0-現在のスクリプトのファイル名。

$#-スクリプトに提供される引数の数。

$$-現在のシェルのプロセス番号。シェルスクリプトの場合、これは実行中のプロセスIDです。


0

$?プロンプトで最後の実行コマンドの実行ステータスを提供します。値「0」はコマンドが正常に実行されたことを示し、「1」は成功ではないことを示します。


2
対話型プロンプトだけでなく、スクリプトでも、ゼロ以外の値は失敗を示します。
クサラナナンダ

-3

$?実行されたコマンドの終了ステータスを決定します。$(例えば、数字が続く$1$2シェル・スクリプトのパラメータは、等)を表します。


あなたは読みたいかもしれない正しい答えを ...
jasonwryan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.