好吧,所以我一直在处理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将给出正确的结果。
这是怎么发生的,我该如何解决?还有另一种方法可以实现这种比较吗?
谢谢
答案 0 :(得分:3)
您使用的是字符串比较,而不是数字。在双方括号内,括号仅用于优先级,因此您的条件等同于
[[ $l2 < $l1 ]]
要使用数字比较,请使用双括号而不使用方括号:
(( l2 < l1 ))
不幸的是,这也不起作用,因为bash不支持浮点运算,仅支持整数。
您需要使用外部工具,例如
bc <<< "$l1 < $l2"
bc
返回true的1
和false的0
。