これはなぜゼロですか?
$ echo $(( 0 && 0 ))
0
これはなぜゼロですか?
$ echo $(( 1 && 0 ))
0
これはなぜゼロですか?
$ echo $(( 0 && 1 ))
0
これはなぜ1ですか?
$ echo $(( 1 && 1 ))
1
答え1
これは「と一致します。論理和「これは&&
算術的文脈で意味するものです。真理値表は次のとおりです。
| F | T
--+-----+-----
F | F | F
--+-----+-----
T | F | T
「AとB」は、AとBの両方が真である場合にのみ真です。
シェルの算術的文脈では、演算子は次のようになります。C規格で定義されているように実装ここで、「true」はゼロ以外の値であり、「false」は0です。これは、実際には「true」(または「成功」)がゼロで、「false」(または「エラー」)がゼロ以外の値である終了コードの逆です。
また見なさい:
$ echo $((2 && 2))
1
$ echo $((-1 && 2))
1
答え2
man $SHELL
言う
&& logical AND
したがって、ルールは、左がTRUEの場合にのみ右が評価されることです。 0と1のルールを使っているからです。 0は偽、1は真です。
それでは、コードについて話し合ってから説明します。
echo $(( 0 && 0 ))
&& - 左が 0 なので右が評価されないため、0 が印刷されます。
$ echo $(( 1 && 0 ))
&& - 左が 1 なので右を評価します。残念ながら、右は0なので、0が印刷されます。
echo $(( 0 && 1 ))
&& - 左が 0 なので右が評価されないため、0 が印刷されます。
echo $(( 1 && 1 ))
&& - 左が 1 で右も 1 なので右を評価するので、1 が印刷されます。
編集する
あるユーザーが指摘したように、SHELLは&&
段落属性(論理属性も含む)を持っています。ロジックが常に短絡されるという意味ではありません。