如何对 bash 数字数组(有些以科学计数法表示)求和?

MaV*_*aVe 4 bash array awk bc math

由于使用 bc 的以下命令不适用于科学计数法中的数字,因此我想知道是否有替代方案,例如使用 awk?

sum=$( IFS="+"; bc <<< "${arrValues[*]}" )
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 5

sum=$(
  awk 'BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}' "${arrValues[@]}"
)
Run Code Online (Sandbox Code Playgroud)

使用 zsh (如果您不必使用bash,因为它内部支持浮点数:

sum=$((${(j[+])arrValues}))
Run Code Online (Sandbox Code Playgroud)

ksh93

如果您需要提供的精度bc,您可以预处理数字,以便将其12e23更改为(12*10^23)

sum=$(
  IFS=+
  sed 's/\([0-9.]*\)[eE]\([-+]*[0-9]*\)/(\1*10^\2)/g' <<< "${arrValues[*]}" |
    bc -l
)
Run Code Online (Sandbox Code Playgroud)