ループポイントに浮動小数点を追加しようとしています。私のループは非順次です。
j=9.46
for i in 8.0 7.5 7.0 6.5 ;do
$i = $i + $j |bc
echo '$i'
私も試しました
ans=$(( x + y ))
k=$[$i+$j]
ループインデックスに定数を追加し、後でスクリプトのコマンドでそれを使用する必要があります。 |bc を使用して出力をエコーできますが、後でスクリプト内の変数として使用することはできません。
答え1
シェルbash
(ksh93、zsh、またはyashの逆)は、算術計算で浮動小数点演算を実行することはできませんが、常に浮動小数点演算を実行するツールを呼び出すことができます。bc
任意の精度計算には適していますが、awk
配列、算術、ループ操作に適しているため、次はおそらくより良いツールです。
awk -v increment=9.46 -- '
BEGIN {
for (i = 1; i < ARGC; i++) print ARGV[i] + increment
}' 8.0 7.5 7.0 6.5
出力されます:
17.46
16.96
16.46
15.96
awk
デフォルトでは、精度が6桁の浮動小数点数が出力されます。-o OFMT=%.10g
たとえば、10ビット精度を追加します(内部計算ではdouble
通常、64ビット精度のC型数値を使用します)。
答え2
ループで次のようにしてみてください。
i1=$(echo " $i + $j" |bc)
echo "$i1"
まず、両側にスペースがあってはいけません。=
2番目の一重引用符は、シェルが変数の内容を解釈するのを防ぎます。