bash - 具有不同位数的 Bash 浮点比较错误
问题描述
好的,所以我一直在处理 speedtest-cli 的一些结果,并意识到由于 bash 似乎无法正确处理数字的变化,我遇到了一些错误?
无论如何,这是一个直接从终端运行的示例:
ubuntu:~$ l1=9.99
ubuntu:~$ l2=10.44
ubuntu:~$ if [[ (($l2 > $l1)) ]]; then echo "Ok"; fi
ubuntu:~$ if [[ (($l2 < $l1)) ]]; then echo "Not ok"; fi
Not ok
当然,比较例如。10.33 和 11.34 会给出正确的结果。
这是怎么发生的,我该如何解决?还有其他方法可以实现这种比较吗?
谢谢
解决方案
您使用的是字符串比较,而不是数字。在双方括号内,括号仅用于优先级,因此您的条件相当于
[[ $l2 < $l1 ]]
要使用数字比较,请使用不带方括号的双括号:
(( l2 < l1 ))
不幸的是,这也不起作用,因为 bash 不支持浮点运算,只支持整数。
您需要使用外部工具,例如
bc <<< "$l1 < $l2"
bc
返回1
真和0
假。