私はこのようなテストスクリプトいる:それはなぜ代わりに123なぜこのbashショートカットが機能しないのですか?
の
asdf() {
return 1
}
asdf && echo 123 && exit
echo 321
321 outputedされますか?
私はこのようなテストスクリプトいる:それはなぜ代わりに123なぜこのbashショートカットが機能しないのですか?
の
asdf() {
return 1
}
asdf && echo 123 && exit
echo 321
321 outputedされますか?
&&
演算子は論理ANDです。遅延評価:左のステートメントがfalse
(つまりゼロ以外の戻りコード)と評価された場合、論理ANDの適用はとにかくfalse
と評価されるため、正しい部分を評価することは無意味です(論理述語の意味では)。
あなたの関数は1(Bashに関する限りfalse
)を返しますので、右のものはすべて無視され、exit
に到達せず、echo
ステートメントが実行されます。
あなたの代わりにこれを使用すると、そのライン上のすべてのコマンドの実行を強制したい場合は、次のような
{ asdf ; echo 123 ; exit ; }
コマンドリストは常にかかわらず、彼らのリターン・コードの、それらの一つ一つを評価します。最後のセミコロンは必須であることに注意してください。
echo 123
はあなたが短絡オペレータ留めてきたように成功しasdf
場合に限っ実行されます - asdf
後&&
を。今、あなたはreturn
コマンドasdf
が失敗したと考えられているので、順番にasdf
の終了ステータスとなり、戻り値1、で機能asdf
から-ed、したがってecho 123
(そしてもちろんexit
の)実行されることはありません持っています。
echo 321
にこのような条件はないため、通常の方法で実行されます。
終了ステータスについては、ブールの用語を使用しないでください。 'bash' *は、ブール値がtrueを1、falseを0としたコンテキスト、すなわち算術式(echo $((3 <5))を試しています)を持つので、真理の概念を保つ方が良い成功とは異なる。 – chepner