将数组的每个元素求幂并将输出存储到 bash 中的新数组

将数组的每个元素求幂并将输出存储到 bash 中的新数组

我想将分数(分数在第一个循环中计算)提高到十进制幂(第二个循环),但是,我总是得到 1 结果。我也想将第二个循环的输出存储在数组中。有什么想法可以解决这个问题吗?谢谢你!

#
# vector of vertical pressure levels
levs=($(seq 200.0 50.0 900.0))
printf "%s\n" "${levs[@]}"
#
# exponent for dry air
rho=$(bc -l <<<'e(l(0.0819)*0.5)')
echo $rho
#
# calculate fraction of P_surf/P_i from Poisson equation for each vertical pressure level
val3=()
#
for i in "${levs[@]}"
 do
   echo $i
   val3+=($(bc -l <<<"1000.0/$i"))
   echo "$val3"
 done
printf "%s\n" "${val3[@]}"
#
# raise fraction of P_surf/P_i to the rho power for dry air (#bc <<< "2 ^ 3")
pow=()
#
for j in "${val3[@]}"
 do
   echo $j
   echo $rho
   pow+=($(bc <<<"$j^rho"))
   #echo $((i*rho))
   echo "$pow"
 done
# 

答案1

您的尝试存在一些相关问题。当将其作为幂常数提高到时,直接的问题是用作rho文字字符串bc

bc <<<"$j ^ $rho"

即使这样,代码也不起作用,bc不采用小数作为指数。你得到一个错误non-zero scale in exponent

您可以使用awk(在 GNU 变体上测试)相同的内容并应用等精度格式

awk -v base="$j" -v xp="$rho" 'BEGIN{ printf "%.20f", base ** xp }'

相关内容