例如,我想将 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[@]}"