加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – Shell:逻辑AND和OR而不是if-else

发布时间:2020-12-15 22:10:39 所属栏目:安全 来源:网络整理
导读:我想知道为什么 i=10 if [ $i -lt 5 ]; then echo "$i 5"elif [ $i -gt 5 ]; then echo "$i 5"elif [ $i -eq 5 ]; then echo "$i = 5"fi 输出正确的结果: 10 5 而 i=10 [ $i -lt 5 ] { echo "$i 5"} || [ $i -gt 5 ] { echo "$i 5"} || [ $i -eq 5 ] { echo
我想知道为什么

i=10
  if [ $i -lt 5 ]; then
    echo "$i < 5"
elif [ $i -gt 5 ]; then
    echo "$i > 5"
elif [ $i -eq 5 ]; then
    echo "$i = 5"
fi

输出正确的结果:

10 > 5

i=10
     [ $i -lt 5 ] && {
    echo "$i < 5"
} || [ $i -gt 5 ] && {
    echo "$i > 5"
} || [ $i -eq 5 ] && {
    echo "$i = 5"
}

表现得很不寻常:

10 > 5
10 = 5

在我看来,当翻译寻求1时,它应该像这样工作:

0 && {} || 1 && {} || 0 && {}

0 so the 0 && {} is definitely 0; skip {}

1 means that {} must be checked to define the value of whole 1 && {}

因此结果为1,但执行的唯一{}保持在1之后.
但是,当我放入时,这一切都能正常工作! {而不是{s.

i=10
     [ $i -lt 5 ] && ! {
    echo "$i < 5"
} || [ $i -gt 5 ] && ! {
    echo "$i > 5"
} || [ $i -eq 5 ] && ! {
    echo "$i = 5"
}

为什么?!我认为它寻求1s所以因为它在&&&它不会看链中的其他表达式!

解决方法

{…}没有区别,所以你拥有的就是这个:

i=10
[ $i -lt 5 ] && 
echo "$i < 5" ||
[ $i -gt 5 ] &&
echo "$i > 5" || 
[ $i -eq 5 ] &&
echo "$i = 5"

它的工作方式是:

> [$i -lt 5]:这是假的(返回失败),所以它跳转到下一个||,后面有[$i -gt 5].
> [$i -gt 5]:这是真的(返回成功),所以它跳转到下一个&&,后面跟着回应“$i> 5”.
> echo“$i> 5”:这将返回成功,因此它跳转到下一个&&,后面跟着回应“$i = 5”.
> echo“$i = 5”:这会返回成功,所以它跳转到……等等,有一个换行符.我们完成了.

&安培;&安培;和||被称为短路操作符.

编辑:进一步强调这一点,

A && B ||?C

是不一样的

if A; then
    B
else
    C
fi

它相当于

if A; then
    if ! B; then
        C
    fi
else
    C
fi

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读