多个 && 和 || 如何与 if 语句一起使用

多个 && 和 || 如何与 if 语句一起使用

我知道&&是 AND, 是||OR。但是当你有多个时,它们如何相互配合?请参见(语句被替换为数字):

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 类似,该怎么办?那么您该怎么办?

答案1

这在计算机科学术语中被称为“运算符优先级”,如果你搜索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.

注意最后一点...如果你写“如果为真||某事”,那么“某事”将永远不会完成。

答案2

@B.Tanner 的回答对运算符优先级。它们的工作方式很简单,从左到右。

对于您的例子,它的意思是:

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

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

如果任何评估失败,bash则不考虑其余的。

相关内容