如何通过将一个元素添加到上一个条目来将值附加到Bash中的数组?

时间:2018-10-06 10:59:34

标签: arrays linux bash

我有一个数字列表1 2 3 4 5,我试图将它们组织成一个数组,其中值按顺序排列,其中当前值是该数组中先前值的总和(如下所示):{ {1}}。我当前的代码如下:

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[@]}"。我怎样才能最好地解决这个问题?

2 个答案:

答案 0 :(得分:2)

如果您知道如何获取bash数组中数组的最后一个元素,这将非常简单!您可以use a negative index ${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

通过示例和一些修改,您所需要的如上所述。

答案 1 :(得分:1)

您非常接近有效的代码。在这里,我还添加了一些改进:

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,而需要进行微积分。

顺便说一句,那不是斐波那契意甲。