создание массива из выходных данных уравнения

создание массива из выходных данных уравнения

Например, я хочу разделить все целые числа от 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[@]}"

Связанный контент