根据方程输出创建数组

根据方程输出创建数组

例如,我想将 1 到 5 之间的所有整数除以 8,然后将它们放入数组中。我原本想写类似下面的代码,但我确定它是错误且不雅的:

 COUNTER=0
 until [  $COUNTER -lt 8 ]; do
        ${steps[$COUNTER]}=1+(5-1)/8*$COUNTER
        let COUNTER+=1
 done

如果我的代码完全正确,有什么方法可以干净地完成此操作吗?

答案1

seq命令可以按浮点数递增:

declare -a steps=($(seq 1 .5 5))

你可以通过以下方式获得增量echo 'scale=1;(5-1)/8'|bc

答案2

是的,但由于 bash 不进行浮点运算,因此您需要使用另一个工具并将其输出保存在 bash 数组中。例如:

$ perl -le 'print $_/8 for 1..5' 
0.125
0.25
0.375
0.5
0.625

使用以下方法保存在数组中:

array=( $(perl -le 'print $_/8 for 1..5') )

答案3

bash只能进行整数运算。bc浮点数的使用方法:

from=1
to=5
steps=8
for c in $(seq 0 $steps) ; do
    ar[c]=$(echo $(bc -l <<< "$from + ($to - $from) / $steps * $c"))
done
echo "${ar[@]}"

相关内容