Как сделать несколько && и || работать с операторами if

Я знаю, что && - это И, а || - ИЛИ. Но как они работают друг с другом, если их несколько? См. (Утверждения заменены числами):

if 1 && 2 || 3 && 4
->
 1) (1 AND 2) OR (3 AND 4)
 2) 1 AND (2 OR 3) AND 4


if 1 && 2 || 3 && 4 || 5 && 6
->
 1) (1 AND 2) OR (3 AND 4) OR (5 AND 6)
 2) 1 AND (2 OR 3) AND (4 OR (5 AND 6))
 etc. etc.

Итак: Как работают множественные && и || ? Есть ли порядок (например, && всегда выше || ), или просто «слева направо», или что-то еще? Что, если оператор if работает как вариант 1, а вы хотите, чтобы он работал как вариант 2? Что же тогда делать?

0
задан 29 April 2021 в 10:05

2 ответа

@B.Ответ Таннера имеет правильное объяснение о приоритете оператора . Они работают просто слева направо.

Для ваших примеров это означает:

if 1 && 2 || 3 && 4
--> (((1 && 2) || 3) && 4)

if 1 && 2 || 3 && 4 || 5 && 6
--> (((((1 && 2) || 3) && 4) || 5) && 6)

Если какая-либо оценка не удалась, bash не учитывает остальное.

0
ответ дан 7 May 2021 в 17:42

На жаргоне компьютерных наук это называется "приоритет оператора", и если вы поищете в man bash precedence, то найдете ответ на свой вопрос:

          Expressions may be combined using the following operators,
          listed in decreasing order of precedence:

          ( expression )
                 Returns the value of expression.  This may be used to
                 override the normal precedence of operators.
          ! expression
                 True if expression is false.
          expression1 && expression2
                 True if both expression1 and expression2 are true.
          expression1 || expression2
                 True if either expression1 or expression2 is true.

          The && and || operators do not evaluate expression2 if the value
          of expression1 is sufficient to determine the return value of
          the entire conditional expression.

Обратите внимание на последний бит... если вы напишете "if true || something", то "something" никогда не будет выполнено.

2
ответ дан 7 May 2021 в 17:42

Другие вопросы по тегам:

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