Как добавить значения в массив в Bash, добавив один элемент к предыдущей записи? - PullRequest
0 голосов
/ 06 октября 2018

У меня есть список чисел 1 2 3 4 5, которые я пытаюсь упорядочить в массив, где значения находятся в последовательности, где текущее значение является суммой предыдущих значений в массиве (например, так): 1 3 6 10 15,Мой текущий код выглядит следующим образом:

array=()
for n in `seq 1 5`
do
    if [ $n -eq 1 ]; then
        array+=($n)
    else
        value=$n
        index="$(($n-1))"
        array+=(`echo ${array[$index]}+$value`)
    fi

done

Однако, когда я пытаюсь проверить массив echo "${array[@]}", я получаю 1 +2 +3 +4 +5.Как мне лучше всего решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Вы довольно близки к рабочему коду.Здесь я также добавил некоторые улучшения:

array=()
for n in {1..5}
do
    if [ "$n" -eq 1 ]; then
        array+=("$n")
    else
        value="$n"
        index="$((n-1))"
        array+=($((${array[$index]}+value)))
    fi
done

Вы можете избежать использования seq, и вам не нужен echo, но исчисление.

Кстати, это не Фибоначчисерия.

0 голосов
/ 06 октября 2018

Это довольно просто, если вы знаете, как получить последний элемент массива в bash массивах !.Вы можете просто использовать отрицательный индекс ${myarray[-1]}, чтобы получить последний элемент.Вы можете сделать то же самое для второго по счету и т. Д .;в Bash:

fbseries=()

for ((i=1; i<=5; i++)); do
    if [ "$i" -eq 1 ]; then
        fbseries+=("$i")
    else
        fbseries+=( $(( ${fbseries[-1]} + $i )) )
    fi
done

С примером и некоторыми изменениями все, что вам нужно, это как указано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...