浮動小数点数を扱うときは少し注意する必要があることに注意してください。等しいかどうかをテストする場合は、実際に精度を決定し、それを使用して比較する必要があります。何かのようなもの:
if (abs(x1-x2) < 0.0001) then equal # pseudo-code
その理由は、コンピューターでは真の数学的実数ではなく、限られた精度の 2 進分数を扱っているからです。scale=3 で bc の精度を制限すると、この効果があります。
また、シェルスクリプトでこのようなことをしようとしないことをお勧めします。できないわけではありませんが、トリッキーな部分を実行するためにたくさんの小さなサブコマンドをフォークする必要があります。これは実行が遅く、一般的に書くのが面倒です。ほとんどの時間をシェルの取得に費やします。本当にやりたいコードを書くのではなく、やりたいことをやる。代わりに、より洗練されたスクリプト言語を使用してください。私が選んだ言語は perl ですが、他にもあります。このような...
echo $var1 $var2 $total | perl -ne 'my ($var1, $var2, $tot) = split /\s+/; if ($var1/$tot == $var2/$tot) { print "equal\n"; }'
$total が正の場合、同じ値 (質問の $total ) で除算していることにも注意してください。