Dans la fonction ci-dessous avec 9 arguments:
SUM() {
echo "The sum is $(($1+$2+$3+$4+$5+$6+$7+$8+$9))"
}
Je veux faire du deuxième argument le suivant (3..9) devenir un argument facultatif .
Lorsque j'appelle la fonction avec 2 arguments, j'obtiens une erreur:
SUM 3 8
bash: 3+8+++++++: syntax error: operand expected (error token is "+")
Remarque BOLD : le premier argument et le deuxième argument sont des arguments de force et ne sont pas facultatifs pour la fonction. Je veux seulement que les deuxièmes arguments au suivant soient optionnels et quand j'appelle la fonction moins de 2 arguments, la fonction ne doit retourner aucun résultat.
Jetez un œil à l'
shift
opérateur. Il déplacera les arguments 2 et suivants vers les positions 1 et suivantes, rejetant l'argument 1.la source
Vous pouvez utiliser une définition récursive qui se termine quand
sum
est invoquée sans arguments. Nous utilisons le fait quetest
sans arguments est évalué àfalse
.la source
Essaye ça:
Cela produira 12 et 30.
$@
fait référence au paramètre,$#
renvoie le nombre de paramètres, dans ce cas 3 ou 11.Testé sur Linux Redhat 4
la source
Vous pouvez simplement utiliser une petite boucle:
Personnellement, j'utiliserais simplement
perl
ou à laawk
place:ou
la source
Utilisez 0 comme valeurs par défaut pour 1 $ à 9 $:
De
man bash
:Exemples:
La somme est 0
La somme est de 3
La somme est 9
Même sortie avec awk:
la source
C'est aussi ma propre solution, je l'ai essayée et j'ai trouvé:
Mais la réponse de @ muru est bonne.
la source