私の端末では、一見ランダムな数字127
が出力されました。私はそれがいくつかの変数の値を出力していると思います、そして私の疑いをチェックするために、私は新しい変数v=4
を定義しました。 echo $?
を再度実行すると、出力として0
が得られました。
4が答えだと思っていたので混乱しています。
man bash
から:
$?最後に実行されたフォアグラウンドパイプラインの終了ステータスに展開します。
echo $?
は、最後のコマンドの終了ステータスを返します。最後に実行されたコマンドの終了ステータスである127
がエラーで終了しました(おそらく)。正常終了時のコマンドは、終了ステータス0
で終了します(おそらく)。最後のコマンドは、前の行の0
がエラーなしで終了したため、echo $v
を出力しました。
コマンドを実行すると
v=4
echo $v
echo $?
次のように出力されます。
4 (from echo $v)
0 (from echo $?)
また試してください:
true
echo $?
0
を取得します。
false
echo $?
1
を取得します。
true
コマンドは何もせず、ステータスコード0
で終了します。 false
コマンドも何もせず、失敗を示すステータスコード(つまり、ステータスコード1
)で終了します。
$?
は、前のコマンドがどのように機能したかに応じて何をすべきかを決定する方法(終了ステータスの確認)としてシェルスクリプトで役立ちます。終了ステータスは0
前のコマンドが機能した(正常に終了した)場合、それ以外の場合はゼロ以外の数値。
デモ例:
#!/bin/bash
patience=3
read -t "$patience" -p "Press 'Enter' if you run Unix or Linux, otherwise press 'ctrl+d' "
status="$?"
if [[ $status -eq 0 ]]
then
echo "That's great :-)"
Elif [[ $status -eq 1 ]]
then
echo "(exit status=$status)
You are welcome to try Unix or Linux :-)"
else
echo "(exit status=$status)
You did not answer within $patience seconds. Anyway :-)"
fi
echo "'Unix & Linux' is a question/answer web site for
Unix and Linux operating systems"
UnixまたはLinuxなしでbashシェルスクリプトを実行する方法を尋ねる場合があります;-)