我知道&&
是 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
则不考虑其余的。