在 bash 脚本中将浮点数添加到循环索引

在 bash 脚本中将浮点数添加到循环索引

我正在尝试将浮点数添加到循环点。我的循环是非顺序的。

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

shell 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 位精度(内部计算通常使用 Cdouble类型数字,通常具有 64 位精度)。

答案2

在循环中尝试类似的操作:

i1=$(echo " $i + $j" |bc)
echo "$i1"

首先,两边不应该有空格=
第二个单引号将阻止 shell 解释变量的内容

相关内容