AND演算子を使用するechoコマンドは終了しません。

AND演算子を使用するechoコマンドは終了しません。
echo hai && echo bye

印刷

hai 
bye

しかし、

echo hai && echo $?

印刷

hai
0

最初のechoコマンドの戻り値がある場合、0演算子がAND実行された後にechoステートメントはどうなりますか?AND戻り値がすぐに出てくるのを見ましたか0

答え1

&&あなたの混乱は、多くの人気言語(特にCベースの言語)がゼロに遭遇するとシーケンス評価を中断するという事実から来ています。 0が考慮され、false残りはすべてであるためですtrue。しかし、Bashではそうではありません。通常、POSIXシステム(および他のすべてのUnixファミリーシステム)では、戻りコード0が考慮されSUCCESS(エラーがないため何も返されません)、ゼロ以外の戻りコードが考慮されますFAILURE。外部プログラム(Cプログラムなど)でも組み込みシェルでも、Bashのすべてのコマンドは値を返す必要があります。

簡単なコマンド一連のオプションの変数割り当てと、スペースで区切られた単語とリダイレクトが続き、次に終了します。制御演算子。最初の単語は実行するコマンドを指定し、引数0に渡されます。残りの単語は、呼び出されたコマンドに引数として渡されます。

aの戻り値簡単なコマンド終了状態または128+です。Nコマンドが信号によって終了する場合N

(...)

シェル組み込みコマンドは状態0(本物)成功して0以外の場合(間違った) 実行中にエラーが発生した場合。すべての組み込み関数は終了状態2を返し、誤った使用法を示します。

ただし、戻り値はブール値ではありません。 0 ~ 255 の数値です。

実行されたコマンドの終了状態は次のとおりです。待機プロセスシステムコールまたは同等の機能。終了状態の範囲は 0 ~ 255 ですが、シェルでは以下のように具体的に 125 より高い値を使用することもできます。シェル組み込みおよび複合コマンドの終了状態もこの範囲に制限されます。場合によっては、シェルは特定のエラーモードを示すために特別な値を使用します。

シェルの場合、終了ステータス0で終了したコマンドは成功しました。 終了ステータス 0 は成功を示します。ゼロ以外の終了状態は失敗を示します。 致命的な信号によりコマンドが終了した場合窒素、bashで使用される値は128+です。窒素終了状態に。

(大胆な私のもの。)

コマンドが戻りコードをシェルに報告すると、通常、終了コードがゼロであることを確認するだけで十分です。

&&一緒にリンクされたリストの次のコマンドは、前のコマンドが0を返した場合にのみ実行されますSUCCESS。つまり、次のようになります。

ANDリストとORリストは、それぞれ&& および制御演算子で||区切られた1つ以上のパイプシーケンスです。 AND リストと OR リストは左の関連付けで実行されます。 ANDリストの形式は次のとおりです。

              コマンド1&&コマンド2

コマンド2次の場合にのみ実行されます。コマンド1終了状態 0 を返します。

答え2

コマンドの戻り値は、通常のブール値とは異なります。コマンドを実行すると、0 は成功を示し、他の値は失敗を示します。このため、&&はここ​​で成功率がゼロになると予想しています。

答え3

zshここでも

echo hai && echo bye
hai
bye

同様に

echo hai && echo %?
hai
0

あなたが見ているコマンドがここに提供したコマンドhaiとまったく同じ行にありますか?bye

あなたの質問に対する直接の答えでは、終了ステータスは0です。成功そのため、2番目の文が実行されます。 (これにより、ゼロ以外の終了ステータス値が異なるエラーを示す可能性があります。)

関連情報