bcを使用した後のコマンドは科学表記の数には機能しないので、awkを使用するなどの代替手段があるかどうか疑問に思います。
sum=$( IFS="+"; bc <<< "${arrValues[*]}" )
答え1
sum=$(
awk 'BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}' "${arrValues[@]}"
)
zshを使用してください(そうでない場合持つ)bash
内部的に浮動小数点数をサポートしているからです。
sum=$((${(j[+])arrValues}))
そしてksh93
:
提供された精度が必要な場合は、bc
数字が次の12e23
ように変更されるように前処理できます(12*10^23)
。
sum=$(
IFS=+
sed 's/\([0-9.]*\)[eE]\([-+]*[0-9]*\)/(\1*10^\2)/g' <<< "${arrValues[*]}" |
bc -l
)
答え2
Perlソリューション:
perl -MList::Util=sum -l -e 'print sum(@ARGV)' -- "${array[@]}"
または任意の精度のために:
perl -Mbignum -MList::Util=sum -l -e 'print sum(0, @ARGV)' -- "${array[@]}"
(0
大きな数字を使用して強制的に合計するテキストを追加しました)。