web-dev-qa-db-ja.com

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

1つのシェルスクリプトを実行すると、「$?」という用語が表示されました。この用語の意味は何ですか?

37
Renjith G

$?は、最後に実行されたフォアグラウンドパイプラインの終了ステータスに展開されます。 Bashマニュアルの特別なパラメータのセクション を参照してください。

簡単に言えば、それは最後のコマンドの終了ステータスです。

43
cjm

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

この後者の使用法はより速く、一時変数に相当する量でシェルの変数の名前空間を汚染せず、多くの場合人間にとってより読みやすく、「肯定的な論理」の使用を奨励します。ほとんどの状況でシンプル。ほとんどの場合、$?を使用しないでください。

26
Bruce Ediger

cjmの発言 に加えて、$?が0の場合、前のプロセスは正常に(または正常に)終了しました。そうでない場合、エラーが発生しました。

3
Barun

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

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

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

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

3
Midhun S Sivan

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

0
Rahul Arora