linux shell 中的浮点数比较

Floating point comparison in linux shell

我正努力在 Linux 销售中实现这一目标

set a=1.2345
set b=2.34

if (abs(a-b)>1.2) then
...
endif

我面临几个问题:

我无法解决我的问题并一次处理所有问题。我搜索了很多页面,但有些解决方案对我不起作用。例如,我似乎没有 abs 功能。

如有任何帮助,我们将不胜感激。

bash不做浮点数。标准实用程序 bc 可以。这使用 bc 来执行您要求的测试:

a=1.2345
b=2.34

r=$(echo "($a - $b)^2 > 1.2^2" | bc)
if [ "$r" -eq 1 ]
then
        echo True
else
        echo False
fi

由于 bc 没有 abs 函数,上面的代码使用简单的变通方法对不等式的每一边求平方。 bc returns 1 如果测试为真或 0 如果测试为假。此输出保存在变量 r 中。测试 r 的值是否等于 1[ "$r" -eq 1 ]if 语句相应地响应。