如何在 shell 脚本中减去浮点值

如何在 shell 脚本中减去浮点值

我有一个使用浮点值的脚本,但不知何故我无法减去两个浮点数。

这是示例代码

#!/bin/bash

p="1"
h="10"
m=$(echo "3.5"| bc -l)
for (( c=$p; c<=$h; c++ ))
do
   r=$(echo "($p-$m)"| bc -l)

   echo "Z $c $m $r"
done

这就是结果

Z 1 3.5 -2.5
Z 2 3.5 -2.5
Z 3 3.5 -2.5
Z 4 3.5 -2.5
Z 5 3.5 -2.5
Z 6 3.5 -2.5
Z 7 3.5 -2.5
Z 8 3.5 -2.5
Z 9 3.5 -2.5
Z 10 3.5 -2.5

答案1

改变线路

   r=$(echo "($p-$m)"| bc -l)

   r=$(echo "($c-$m)"| bc -l)

因为它不是,$p$c它被循环改变了。

答案2

bash不支持浮点运算。kshzsh执行。POSIXLy,您可以bc使用Florian 的回答建议,或者awk。例如,

$ awk 'BEGIN{print 2.5+3.7}'
6.2

Ubuntu 还附带Python和,Perl它们能够执行浮点计算。

$ perl -le 'print(2.5+3.7)'
6.2

$ python3 -c 'print(2.5+3.7)'
6.2

另请参阅其他选项的非常详尽的列表:如何在 bash 或其他语言/框架中进行整数和浮点计算?

还要注意的是,根据POSIX Shell 语言标准在算术扩展中$((...))

只需要有符号长整数算术...作为扩展,shell 可以识别列出的以外的算术表达式。

bash因此,从和中省略浮点运算/bin/dash符合 POSIX 规范。

答案3

我知道这已经晚了,但当结果出现在 Google 上时,有人可能会读到这个。解决方案是将其写为“$a- $b”。空格使它对我有用。

相关内容