私はコードがオンラインのどこかに書かれているのを見ました。お願いします。グーグルは助けにならなかった。
ここに私が見たコードがあります:
#!/bin/sh
ping -c 2 localhost
if [ $? != 0 ] ; then
echo "Couldn't ping localhost, weird"
fi
ping -c 2 veryweirdhostname.noend
if [ $? != 0 ] ; then
echo "Surprise, Couldn't ping a very weird hostname.."
fi
echo "The pid of this process is $$"
から取得: http://efod.se/writings/linuxbook/html/Shell-scripts.html
$?
は、最後に実行したコマンドの戻り値を保持する変数です。
Cプログラムの例(example.c
):
int main() { return 1; }
Bashの例:
gcc -o example example.c
./example
echo $? # prints 1
ほとんどの答えには、少し詳細がありません。決定的な答えは シェルのPOSIX標準、特別なパラメーターのセクション にあります:
$?最新のパイプラインの10進終了ステータスに展開します(パイプラインを参照)。
Wordpipelineに驚かないでください。ls
などの単純なコマンドでさえ、文法的には単一のコマンドで構成されるパイプラインであるためです。しかし、その後、マルチコマンドパイプラインの$?
とは何ですか?これは、パイプライン内のlastコマンドの終了ステータスです。
grep foo bigfile|head -n 10 > result &
のようなバックグラウンドで実行されるパイプラインはどうでしょうか?
パイプラインの最後のコマンドが終了すると、wait
を介して終了ステータスを取得できます。バックグラウンドプロセスpidは$!
として使用でき、$?
はバックグラウンドコマンドが正しく開始されたかのみを報告します。
言及する価値があるもう1つの詳細は、終了ステータスが通常0から255の範囲であり、128から255がシグナルのために終了したプロセスであることを示します。 Cプログラムから他の値を返すと、$?
に正確に反映されない可能性があります。
これは、最後に実行されたコマンドからの戻りコードです。
慣例により、0は正常終了であり、ゼロ以外は何らかのエラーを示します。
この特殊変数は、スクリプトまたはコマンドラインで実行された最後のコマンドの終了ステータスを示します。たとえば、コマンドラインで、ユーザーは次のように入力できます。
who; echo $?
出力は次のようになります
user tty7 2014-07-13 19:47
0
これはwhoの出力とコマンドの終了ステータスを示しています。スクリプトも同じです。
#!/bin/bash
who
echo $?
出力:0
他の答えはbashをかなりうまくカバーしていますが、質問にシェルを指定していません。 csh(およびtcsh)で$?
は 変数の存在を問い合わせる に使用できます。
if $?my_var then
echo my_var exists
endif