Bashスクリプトのループインデックスにfloatを追加する

Bashスクリプトのループインデックスにfloatを追加する

ループポイントに浮動小数点を追加しようとしています。私のループは非順次です。

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型数値を使用します)。

おすすめ記事