我有一個使用浮點值的腳本,但有些我無法減去兩個浮點值。
這是範例程式碼
#!/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
之一佛洛里安的回答建議,或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
我知道這已經太晚了,但當結果出現在谷歌上時,有人可能會讀到這個。解決方法是寫成“$a-$b”。這個空間讓它對我有用。