如何在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之一佛洛里安的回答建議,或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”。這個空間讓它對我有用。

相關內容