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

如果语句在bash中具有算术比较行为

发布时间:2020-12-15 22:46:15 所属栏目:安全 来源:网络整理
导读:我正在学习bash,我注意到一些我不能(还)解释的奇怪.在学校,我了解到if语句将0评估??为true,将1评估为false,因此它可以与其他命令的状态代码一起使用.现在是我的问题:为什么会发生这种情况: echo $((52)) #prints 1echo $((52)) #prints 0if ((52)) ; then
我正在学习bash,我注意到一些我不能(还)解释的奇怪.在学校,我了解到if语句将0评估??为true,将1评估为false,因此它可以与其他命令的状态代码一起使用.现在是我的问题:为什么会发生这种情况:

echo $((5>2)) #prints 1
echo $((5<2)) #prints 0
if ((5>2)) ; then echo "yes" ; else echo "no" ; fi #prints yes
if ((5<2)) ; then echo "yes" ; else echo "no" ; fi #prints no

这似乎不符合逻辑. bash如何知道我使用的是算术表达而不是其他命令?

解决方法

$((…))是一个算术表达式;它扩展为括号内表达式的值.由于它不是命令,因此它没有自己的退出状态或返回值.如果为真,则布尔表达式的计算结果为1,如果为假,则计算结果为0.

另一方面,((…))是一个算术语句.它本身就是一个命令,它可以将其身体作为算术表达式进行评估,然后查看结果值.如果值为true,则命令成功并且退出状态为0.如果值为false,则命令失败,退出状态为1.

当学习bash停止考虑if语句中的条件时,这是一个好主意,而循环等等是真或假,而是命令成功或失败.毕竟,shell语言不是为数据处理而设计的;它们是运行其他程序的粘合语言.

(编辑:李大同)

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

    推荐文章
      热点阅读