Como posso adicionar inteiros em um array

3

Estou tentando adicionar um número em uma matriz.

Exemplo:

array=( 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 )

Eu fiz desta forma, mas eu quero usar uma matriz e, em seguida, resumir os números em um script de shell.

num1=2
num2=4
num3=8
num4=10
num5=12
num6=14
num7=16
num8=18
num9=20
sum=$((num1+num2+num3+num4+num5+num6+num7+num8+num9))
echo "The sum is: $sum"
    
por DSH72 04.12.2015 / 19:33

5 respostas

11

Você pode fazer:

$ array=( 2, 4, 6, 8, 10, 12, 14, 16, 18, 20)

$ echo "${array[@]/,/+}" | bc               
110
  • ${array[@]/,/+} é um padrão de expansão de parâmetro que substitui todos os , por + em todos os elementos do array

  • Então bc simplesmente faz a adição

Vamos dividir um pouco para esclarecer:

$ array=( 2, 4, 6, 8, 10, 12, 14, 16, 18, 20)

$ echo "${array[@]/,/+}"                     
2+ 4+ 6+ 8+ 10+ 12+ 14+ 16+ 18+ 20

$ echo "${array[@]/,/+}" | bc
110
    
por heemayl 04.12.2015 / 19:38
3

Em Python, é muito simples adicionar uma lista de números.

$ python -c 'print sum([1,2,3])'

Saídas 6.

    
por Progrock 04.12.2015 / 19:49
3
num1=2
num2=4
num3=8
array=($num1 $num2 $num3)
declare -i sum
IFS=+ sum="${array[*]}"
echo $sum

Saída:

14

Veja: help declare

    
por Cyrus 04.12.2015 / 19:49
2

Usando um loop no Bash:

#!/bin/bash

nums=(1 2 3)
total=0
for n in ${nums[@]}
do
  (( total += n ))
done
echo $total

Saídas 6.

    
por Progrock 04.12.2015 / 20:33
1

Também é possível usar awk para realizar o somatório de loop:

$ echo "${arr[@]}"
1 2 3
$ awk 'BEGIN{for (arg in ARGV) sum += arg;print sum}' "${arr[@]}"
6
    
por Sergiy Kolodyazhnyy 03.01.2017 / 13:29