Em geral, um argumento é convertido em um inteiro automaticamente se usado dentro de uma expansão aritmética $((...))
. Este loop irá somar todos os argumentos:
for x; do sum=$((sum+x)); done; echo "$sum"
O shell armazena em cache todos os argumentos em locais de memória separados, como um programa c lida com um array argv []. O usuário do shell não precisa lidar diretamente com esse array, o shell ajuda atribuindo-os a $ 1, $ 2, $ 3, etc. O shell também abstrai essa lista como "$ @". E, finalmente, a sintaxe for x
é uma abreviação de for x in "$@"
para fazer loop em todos os argumentos.
Isso é assumir que os argumentos são números decimais que não começam com zero, números octais começando com zero ou números hexadecimais que começam com 0x
e que a soma total não estourará (2 ^ 63-1 em 64 bits sistemas)
Esta lista:
$ ./script 12 021 0xab
Imprime 200
(o resultado decimal).