echo 1 && false && echo 2 || echo 3
1
3
echo 2 || echo 3
2
上記のコードで最初のケースでは、なぜ2が印刷されないのですか? 2番目のケースでは、なぜ2が印刷されますか?
ベストアンサー1
より一般的な質問シェルの制御およびリダイレクト演算子は何ですか?その答えはおそらくあなたの質問に対する答えになるでしょう。しかし、参考にするために、いくつかの経験則を提示します。
長いリストおよび/またはリストがある場合は、各リストを
||
「このリストの最後に実行された部分」として扱うことができます。失敗、次のセクションを実行してください。」(ここで「失敗」はゼロ以外の終了ステータスを返すことを意味します)同じタイプの推論を使用すると、「
&&
このリストで最も最近実行された部分成功、次のセクションを実行してください。
上記の内容は一般的に知られているものである。段落評価。
コードを例として、各コードをecho
実行する機会があるとします(echo
交換失敗する標準出力ストリームが閉じられた場合):
echo 1 && false && echo 2 || echo 3
最初はecho 1
成功してfalse
実行されます。 false
(設計上)失敗するのでecho 2
確かにランニング。echo 3
、一方、false
最後に実行された list() 部分が失敗したために実行されます。
見ている
echo 2 || echo 3
これはecho 2
最初に実行されますが、echo 3
リスト内の最後に実行された部分が失敗しなかったためではありません。