web-dev-qa-db-ja.com

$をエコーし​​ますか?行う?

私の端末では、一見ランダムな数字127が出力されました。私はそれがいくつかの変数の値を出力していると思います、そして私の疑いをチェックするために、私は新しい変数v=4を定義しました。 echo $?を再度実行すると、出力として0が得られました。

4が答えだと思っていたので混乱しています。

5
Weezy

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)で終了します。

8
Prvt_Yadav

$?は、前のコマンドがどのように機能したかに応じて何をすべきかを決定する方法(終了ステータスの確認)としてシェルスクリプトで役立ちます。終了ステータスは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シェルスクリプトを実行する方法を尋ねる場合があります;-)

3
sudodus