2017-02-06 23 views

答えて

0

&&演算子は論理ANDです。遅延評価:左のステートメントがfalse(つまりゼロ以外の戻りコード)と評価された場合、論理ANDの適用はとにかくfalseと評価されるため、正しい部分を評価することは無意味です(論理述語の意味では)。

あなたの関数は1(Bashに関する限りfalse)を返しますので、右のものはすべて無視され、exitに到達せず、echoステートメントが実行されます。

あなたの代わりにこれを使用すると、そのライン上のすべてのコマンドの実行を強制したい場合は、次のような

{ asdf ; echo 123 ; exit ; } 

コマンドリストは常にかかわらず、彼らのリターン・コードの、それらの一つ一つを評価します。最後のセミコロンは必須であることに注意してください。

+0

終了ステータスについては、ブールの用語を使用しないでください。 'bash' *は、ブール値がtrueを1、falseを0としたコンテキスト、すなわち算術式(echo $((3 <5))を試しています)を持つので、真理の概念を保つ方が良い成功とは異なる。 – chepner

1

echo 123はあなたが短絡オペレータ留めてきたように成功しasdf場合に限っ実行されます - asdf&&を。今、あなたはreturnコマンドasdfが失敗したと考えられているので、順番にasdfの終了ステータスとなり、戻り値1、で機能asdfから-ed、したがってecho 123(そしてもちろんexitの)実行されることはありません持っています。

echo 321にこのような条件はないため、通常の方法で実行されます。

関連する問題