In der folgenden Funktion mit 9 Argumenten:
SUM() {
echo "The sum is $(($1+$2+$3+$4+$5+$6+$7+$8+$9))"
}
Ich möchte die zweiten Argumente zum nächsten (3..9) zu optionalen Argumenten machen .
Wenn ich die Funktion mit 2 Argumenten aufrufe, erhalte ich eine Fehlermeldung:
SUM 3 8
bash: 3+8+++++++: syntax error: operand expected (error token is "+")
Anmerkung FETT : Erstes Argument und zweites Argument sind Force-Argumente und für Funktionen nicht optional. Ich möchte nur, dass zweite Argumente zum nächsten optional sind, und wenn ich die Funktion mit weniger als 2 Argumenten aufrufe, muss die Funktion kein Ergebnis zurückgeben.
Schauen Sie sich den
shift
Bediener an. Es verschiebt Argumente 2 und weiter auf Position 1 und weiter und verwirft Argument 1.quelle
Sie können eine rekursive Definition verwenden, die endet, wenn sie
sum
ohne Argumente aufgerufen wird. Wir machen uns die Tatsachetest
zunutze , dass ohne Argumente ausgewertet wirdfalse
.quelle
Versuche dies:
Dies gibt 12 und 30 aus.
$@
bezieht sich auf Parameter,$#
gibt die Nummer des Parameters zurück, in diesem Fall 3 oder 11.Getestet unter Linux Red Hat 4
quelle
Du könntest einfach eine kleine Schleife benutzen:
Persönlich würde ich nur
perl
oderawk
verwenden:oder
quelle
Verwenden Sie 0 als Standardwerte für $ 1 bis $ 9:
Von
man bash
:Beispiele:
Die Summe ist 0
Die Summe ist 3
Die Summe ist 9
Gleiche Ausgabe mit awk:
quelle
Es ist auch meine eigene Lösung, die ich ausprobiert und gefunden habe:
Aber @ Murus Antwort ist gut.
quelle