Acho que você está perguntando como obter os primeiros N elementos de um array bash. Em caso afirmativo, isso deve funcionar:
$ array=( $(seq 1 30 ) )
$ echo ${array[@]}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
$ echo ${array[@]:0:20}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
O formato geral é ${array[@]:START:LENGTH}
. Isso retornará o COMPRIMENTO dos próximos elementos do array a partir do START.
Então, para adicionar os 20 primeiros, você poderia fazer (note que estou começando em 0, não em 1, pois os arrays começam em 0. Sugiro que você corrija seu script e defina count=0
no início, em vez de count=1
; se você não quiser, altere o 0
abaixo para um 1
):
for i in ${number[@]:0:20}; do
sum=$((sum + i))
done
echo $sum
Como alternativa, você pode apenas iterar os primeiros 20 elementos da matriz:
for((i=0;i<20;i++))
do
sum=$(( sum + number[$i] ))
done
echo "$sum"
Ambos os métodos pressupõem que você esteja adicionando inteiros. Bash não lida com números de ponto flutuante, então eles vão quebrar se você tentar adicionar frações. Se isso é um problema, use o truque inteligente do @hemayl ou qualquer outro programa que possa fazer matemática. Por exemplo:
echo "${number[@]:0:20}" | perl -lane '$k+=$_ for @F; print $k'