如果语句在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语言不是为数据处理而设计的;它们是运行其他程序的粘合语言. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |