12

bashで次のコマンドを試しました

echo this || echo that && echo other

これにより、出力が得られます

this
other

わからなかった!

私のドライランは次のようになります:

  1. echo this || echo that && echo other示すtrue || true && true
  2. &&has more precedencethanであるため||、2 番目の式が最初に評価されます。
  3. であるため、both are true||評価され、これも true になります。
  4. したがって、出力は次のようになります。

それ

他の

これ

&&よりも優先度の高いJavaのバックグラウンドを持っているため||、これをbashに関連付けることができません。

どんな入力も非常に役に立ちます!

4

6 に答える 6

15

からman bash

3.2.3 コマンド一覧

リストは、演算子「;」、「&」、「&&」、または「||」のいずれかで区切られ、オプションで「;」、「&」のいずれかで終了する 1 つ以上のパイプラインのシーケンスです。 '、または改行。

これらのリスト演算子のうち、「&&」と「||」優先順位が同じで、その後に「;」が続きます および '&' の優先順位は同じです。

だから、あなたの例

echo this || echo that && echo other

のように読むことができます

(this || that) && other
于 2013-02-12T16:15:28.980 に答える
5

bash では&&同等||の優先順位があり、左側に関連付けられます。詳細については、マニュアルのセクション 3.2.3 を参照してください

したがって、あなたの例は次のように解析されます

$ (echo this || echo that) && echo other

したがって、or の左側のみが実行されます。これは、右側が実行される必要がないためです。

于 2013-02-12T16:14:47.307 に答える
3

bashis short-circuit: のブール値評価はオペランドをtrue || false評価しません。これは、オペランドが演算の結果を決定するのに十分であるためです。同様に、は式の値を変更できないため、オペランドを評価しません。falsetruefalse && truetrue

のブール値評価bashは、実際にはに、オペランドの順序ではなく、条件付き評価を制御するために使用されます。通常の使用法はdo_foo || do_bar_if_foo_failsまたはdo_foo && do_bar_only_if_foo_has_succeededです。

isと が部分式全体の値を決定するため、どのような状況でもecho thatコマンドが実行されることはありません。echo thistrueecho this || echo that

于 2013-02-12T16:15:16.293 に答える
2

からman bash:

これらのリスト演算子のうち && と || 同等の優先順位があり、その後に ; が続きます。および & は優先順位が同じです。

したがって、出力が期待されます。

于 2013-02-12T16:13:56.020 に答える
1

これが何をするのか説明しましょう:

echo this || echo that && echo other

echo this || echo that->失敗したecho that場合のみecho this

&& echo other-> SUCCEEDSecho otherの前のコマンドの場合のみ。&&

だから基本的に:

echo this---> SUCCESS ----> ---->成功しecho thatたため、実行されません---> --->実行されました原因は正しく実行されました。echo thisecho otherecho this || echo that

于 2013-02-12T16:17:13.747 に答える
1

あなたはすでにそれを理解したと思います。では、演算子の優先順位はそのようには機能しませんbash。あなたの例では、すべてが左から右に進みます。

于 2013-02-12T16:14:01.383 に答える