私の端末では、一見ランダムな数字が印刷されます127
。私はそれが特定の変数の値を印刷していると思い、疑いを確認するために新しい変数を定義しましたv=4
。もう一度実行すると、出力がecho $?
私に与えられました。0
4が答えになると期待していたので混乱しています。
答え1
から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
)で終了します。
答え2
$?
前のコマンドの仕組み(終了ステータスの確認)に基づいて実行する操作を決定するのにシェルスクリプトで役立ちます。終了ステータスは次のようになることが予想できます。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シェルスクリプトを実行する方法を尋ねることもできます;-)