Na função abaixo com 9 argumentos:
SUM() {
echo "The sum is $(($1+$2+$3+$4+$5+$6+$7+$8+$9))"
}
Eu quero fazer com que os segundos argumentos para o próximo (3..9) se tornem argumentos opcionais .
Quando eu chamo a função com 2 argumentos, recebo um erro:
SUM 3 8
bash: 3+8+++++++: syntax error: operand expected (error token is "+")
Nota Negrito : o primeiro argumento e o segundo argumento são argumentos de força e não são opcionais para a função. Eu só quero que os segundos argumentos para o próximo sejam opcionais e quando chamo a função com menos de 2 args, a função não deve retornar nenhum resultado.
Dê uma olhada no
shift
operador. Ele mudará os argumentos 2 e seguintes para as posições 1 e seguintes, descartando o argumento 1.fonte
Você pode usar uma definição recursiva que termina quando
sum
é chamada sem argumentos. Utilizamos o fato de que,test
sem argumentos, é avaliadofalse
.fonte
Tente o seguinte:
Isso produzirá 12 e 30.
$@
refere-se ao parâmetro,$#
retorna o número do parâmetro, neste caso 3 ou 11.Testado em linux redhat 4
fonte
Você pode usar um pequeno loop:
Pessoalmente, porém, eu tinha acabado de usar
perl
ouawk
em vez disso:ou
fonte
Use 0 como valores padrão de US $ 1 a US $ 9:
De
man bash
:Exemplos:
A soma é 0
A soma é 3
A soma é 9
Mesma saída com awk:
fonte
Também é minha própria solução, tentei e encontrei:
Mas a resposta de @ muru é boa.
fonte