Bash 使用带“的命令实现布尔表达式”;如果是,则为“否则”;

Bash 使用带“的命令实现布尔表达式”;如果是,则为“否则”;,bash,Bash,我们知道可以执行if命令;然后呢,;fi,其中从命令返回的状态被解释为布尔值(0==true)。我们还知道,如果[[$a>$b | |$c==yes]],那么做是可以的;然后呢,;fi 但我很好奇,因为我们不允许使用“if”组合像布尔表达式这样的命令,如if-cmd1 | | cmd2;然后,;某物fi。或者我们可以吗 没有“if”或甚至使用嵌套if,还有其他方法可以做到这一点。但是,我对使用if:-)感兴趣 谢谢你的评论。我把这个留在这里 check_and() { if grep -

我们知道可以执行
if命令;然后呢,;fi
,其中从
命令
返回的状态被解释为布尔值(0==true)。我们还知道,如果[[$a>$b | |$c==yes]],那么做
是可以的;然后呢,;fi

但我很好奇,因为我们不允许使用“if”组合像布尔表达式这样的命令,如
if-cmd1 | | cmd2;然后,;某物fi
。或者我们可以吗

没有“if”或甚至使用嵌套if,还有其他方法可以做到这一点。但是,我对使用
if
:-)感兴趣


谢谢你的评论。

我把这个留在这里

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
检查_和(){

if grep-q A这是正确的。
if
语句的条件被定义为一个列表,非常粗略地说,它要么是一个管道,要么是由
&
|
连接的两个列表。这些不是布尔运算符,尽管有相似之处。
A&&b
运行
A
,然后运行
bde>如果
a
成功。
a | | b
运行
a
,如果
a
失败,则运行
b

比较

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)