我有一个数字列表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[@]}"
。我怎样才能最好地解决这个问题?
答案 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
,而需要进行微积分。
顺便说一句,那不是斐波那契意甲。