我们知道可以执行if command ; then something ; fi
,其中从command
返回的状态被解释为boolean(0 == true)。我们也知道可以做if [[ $a > $b || $c == yes ]] ; then something; fi
。
但我很好奇,因为我们不允许使用“if”组合布尔表达式等命令,如if cmd1 || cmd2; then ; something; fi
中所示。或者我们可以吗?
如果没有“if”甚至嵌套if,还有其他方法可以做到这一点。但是,我对使用if
: - )。
感谢任何评论。
答案 0 :(得分:3)
这是正确的。 if
语句的条件被定义为一个列表,粗略地说是单个管道,或由&&
或||
连接的两个列表。这些不是布尔运算符,尽管有相似之处。 a && b
运行a
,然后如果 b
成功,则运行a
。 a || b
运行a
,然后如果 b
失败则运行a
。
比较
if [[ $a > $b || $c == yes ]]; then # conditional operators
if [[ $a > $b ]] || [[ $c == yes ]]; then # shell operators
鉴于[[ ... ]]
是一个内置命令,两者之间的差别很小。但是, shell 运算符具有相同的优先级,而条件运算符&&
的优先级高于条件||
。那是
if a || b && c; then # same as (a || b) && c
if [[ a || b && c ]]; then # same as a || (b && c)
答案 1 :(得分:0)
我会把它留在这里。
check_and() {
if grep -q A <<<"$1" && grep -q C <<<"$1"; then
echo YES
else
echo NO
fi
}
check_or() {
if grep -q A <<<"$1" || grep -q C <<<"$1"; then
echo YES
else
echo NO
fi
}
check_and ABC # YES
check_and ABD # NO
check_and ZBC # NO
check_and ZBD # NO
check_or ABC # YES
check_or ABD # YES
check_or ZBC # YES
check_or ZBD # NO