Se o seu script / função usa os números na linha de comando, você não precisa lê-los com read
(que lê a partir da entrada padrão).
Em vez disso:
addition () {
sum=0
for number do
sum=$(( sum + number ))
done
printf 'Sum is %d\n' "$sum"
}
O loop também pode ser escrito de forma mais explícita como
for number in "$@"; do
sum=$(( sum + number ))
done
Em ambas as variações do loop, a variável number
receberá o valor de cada parâmetro posicional ("argumento de linha de comando") e o corpo do loop adicionará esses valores à variável sum
.
Observe que o código acima assume que todos os argumentos da linha de comando são inteiros sem verificar se eles são.
Para uma saída mais sofisticada:
addition () {
sum=0
for number do
sum=$(( sum + number ))
done
( IFS='+'; printf '%s = %d\n' "$*" "$sum" )
}
"$*"
expandirá para uma única string consistindo nos parâmetros posicionais concatenados com o primeiro caractere de $IFS
como delimitador.
Teste:
$ addition 1 2 3 90 32
1+2+3+90+32 = 128