シェルスクリプトで浮動小数点値を減算する方法

シェルスクリプトで浮動小数点値を減算する方法

浮動小数点値を使用するスクリプトがありますが、何らかの理由で 2 つの浮動小数点数を減算できません。

これはサンプルコードです

#!/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浮動小数点演算をサポートしていません。POSIXLykshでは、どちらも次のようにzsh使用できます。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 シェル言語標準算術展開では$((...))

符号付き長整数演算のみが必要です...拡張機能として、シェルはリストされている以外の演算式を認識する場合があります。

したがって、およびからの浮動小数点演算の省略はbash/bin/dashPOSIX 仕様に準拠しています。

答え3

遅くなりましたが、Google に結果が表示されたので、誰かがこれを読むかもしれません。解決策は、「$a- $b」と書くことです。スペースを入れるとうまくいきます。

関連情報