Пытаясь понять логическое тестирование Bash, получается противоположное:

Вы можете попросить gpgвести себя тихо с--quiet:

gpg --quiet --use-embedded-filename snafu.gpg
0
13.05.2020, 19:07
2 ответа

man $SHELL

рассказывает

&&     logical AND

Таким образом, правило правой стороны будет оцениваться только в том случае, если левая сторона имеет значение ИСТИНА. Поскольку вы используете соглашение 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.

Редактировать

Как указал один пользователь, ОБОЛОЧКА &&имеет свойство короткого -замыкания (наряду с логическим ). И следует отметить, что это логически не эквивалентно постоянному короткому замыканию -.

1
28.04.2021, 23:14

Это соответствует определению «логического и », что представляет собой &&в арифметическом контексте. Таблица истинности выглядит следующим образом:

  |  F  |  T
--+-----+-----
F |  F  |  F
--+-----+-----
T |  F  |  T

«А и В» истинны только в том случае, если истинны и А, и В.

В арифметическом контексте оболочки операторы реализуются в соответствии со стандартом C , где «истина» — любое не-нулевое значение, а «ложь» — ноль. Это действительно противоположно кодам выхода, где «истина» (или, скорее, «успех» )равна нулю, а «ложь» (или, скорее, «ошибка» )— это любой не-нуль. стоимость.

См. также:

$ echo $((2 && 2))
1

$ echo $((-1 && 2))
1
3
28.04.2021, 23:14

Теги

Похожие вопросы