A && B ; C
A は終了ステータス 0 を返します。
B はゼロ以外の終了状態を返します。
C が実行されると、終了ステータス 0 が返されます。
したがって、次の2つの状況のうちどれが発生しますか(どちらの場合もAは当然実行されます)。
BashはBとCを実行します。
BashはBを実行しますが、Cは実行しません。
この質問を拡張して、代替(1または2)の動作を許可するようにチェーンをどのように変更できますか?
編集する:
私は&∧の意味について尋ねることではありません。 。
私はAとBがとにかく処刑されることを知っています。残りのケースは、Bがゼロ以外の終了状態を返すため、Cを無視するか、Bをスキップして独自の利点に基づいてCを再評価することです。
答え1
A && B ; C
A は終了ステータス 0 を返します。
この場合、nextが実行され、B
の終了値に関係なく実行されます。A
B
C
シーケンスグループは(A && B) ; C
asではありませんA && (B ; C)
。必要に応じて、中かっこまたは括弧(サブシェル)を使用してグループ化を追加できます。
残りのケースは、Bがゼロ以外の終了状態を返すので、BとCの両方が無視されることです。
これはあまり意味がありません。 B 自分の終了状態によっては B を無視できません。
または、BをスキップしてCの利点を再評価してみてください。
Aがfalse(0以外)の状態を返す場合にのみBをスキップし、true(0)の状態を返す場合はスキップしません。
数値真理値に対するシェルの理解は、ゼロが偽のC言語と比較して反対です。
Aがfalse(0以外)の状態を返すと、Bは実行されませんが、Cは実行され続けます。