不同位数的Bash浮动比较错误

时间:2019-02-21 20:07:30

标签: bash scripting

好吧,所以我一直在处理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将给出正确的结果。

这是怎么发生的,我该如何解决?还有另一种方法可以实现这种比较吗?

谢谢

1 个答案:

答案 0 :(得分:3)

您使用的是字符串比较,而不是数字。在双方括号内,括号仅用于优先级,因此您的条件等同于

[[ $l2 < $l1 ]]

要使用数字比较,请使用双括号而不使用方括号:

(( l2 < l1 ))

不幸的是,这也不起作用,因为bash不支持浮点运算,仅支持整数。

您需要使用外部工具,例如

bc <<< "$l1 < $l2"

bc返回true的1和false的0