我有一个使用浮点值的脚本,但不知何故我无法减去两个浮点数。
这是示例代码
#!/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
不支持浮点运算。ksh
并zsh
执行。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”。空格使它对我有用。