如何解决小于运算符的行为与 BASH 中的 -le 有何不同?
#!/bin/bash
a=10
b=30
[ $a -eq $b ]
echo $?
echo $(($a==$b))
此代码输出 1 然后输出 0。 为什么 $(($a==$b)) 输出 0?
我已经用 -le 和
[ $a -le $b ] 输出 0
$(($a
我用过 ksh 和 bash 来检查
解决方法
您无法将一个操作的 $?
与另一个操作的输出进行比较。这些是不同的东西,因为对于 exit status 成功为 0,非零结果反映失败,但在数字上下文中(例如 $(( ))
进入),真值为 1,失败为 0。
比较您的测试:
#!/bin/bash
a=10
b=30
[ "$a" -eq "$b" ]
echo "Exit status using -eq: $?"
(( a == b ))
echo "Exit status using (( )): $?"
输出正确:
Exit status using -eq: 1
Exit status using (( )): 1
我对引号、$(( ))
等所做的更改(除了从 (( ))
切换到 $
)是对您当前数据的修饰——它们可能会意外地改变行为值,因此我建议在您的代码中使用这些做法,但它们实际上不会修改即时输出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。