En la siguiente función con 9 argumentos:
SUM() {
echo "The sum is $(($1+$2+$3+$4+$5+$6+$7+$8+$9))"
}
Quiero hacer que los segundos argumentos para el siguiente (3..9) se conviertan en argumentos opcionales .
Cuando llamo a la función con 2 argumentos me sale un error:
SUM 3 8
bash: 3+8+++++++: syntax error: operand expected (error token is "+")
Nota BOLD : el primer argumento y el segundo argumento son argumentos de fuerza y no son opcionales para la función. Solo quiero que los segundos argumentos para el siguiente sean opcionales y cuando llamo a la función menos de 2 args, la función no debe devolver ningún resultado.

Echa un vistazo al
shiftoperador. Desplazará los argumentos 2 y hacia adelante a las posiciones 1 y hacia adelante, descartando el argumento 1.fuente
Podría usar una definición recursiva que termina cuando
sumse invoca sin argumentos. Hacemos uso del hecho de quetestsin argumentos se evalúafalse.fuente
Prueba esto:
Esto generará 12 y 30.
$@se refiere al parámetro,$#devuelve el número de parámetro, en este caso 3 u 11.Probado en Linux Redhat 4
fuente
Podrías usar un pequeño bucle:
Personalmente, solo usaría
perlo en suawklugar:o
fuente
Use 0 como valores predeterminados de $ 1 a $ 9:
De
man bash:Ejemplos:
La suma es 0
La suma es 3
La suma es 9
Misma salida con awk:
fuente
También es mi propia solución. Lo probé y encontré:
Pero la respuesta de @ muru es buena.
fuente