Wenn ich den Befehl bash shift
verwende, Ändert dies die Anzahl der Argumente in $#
?
Anmerkung des Autors: Als ich diese Frage hatte, fand ich sie (noch) nicht in dieser Community. Deshalb habe ich es einfach versucht und meine Antwort bekommen. Da ich dachte, es könnte anderen helfen, habe ich das, was ich hier gelernt habe, als eine selbst beantwortete Frage gepostet .
Antwort
Ja, ist im Standard ausdrücklich erforderlich :
shift [n]
Die Positionsparameter müssen verschoben werden. Dem Positionsparameter 1 muss der Wert von Parameter (1 + n) […] zugewiesen werden, und der Parameter „#“ wird aktualisiert, um die neue Anzahl von Positionsparametern widerzuspiegeln Parameter.
Betrachten Sie dieses Skript:
#!/usr/bin/env bash echo "$#" shift echo "$#"
Nennen Sie es wie script-file first second third
druckt 3
gefolgt von 2
.
Dies bedeutet, dass wir dies tun können Dinge wie:
#!/usr/bin/env bash while [[ "$#" > 0 ]] ; do echo "$1" shift done
… die die Argumente einzeln in einer eigenen Zeile drucken würden.
Kommentare
- … oder lesen Sie den Standard, der " … den Parameter ' # ' wird aktualisiert, um die neue Anzahl von Positionsparametern widerzuspiegeln. "
- Dieses letzte Code-Snippet könnte durch
printf '%s\n' "$@"
oderfor arg do echo "$arg"; done
ersetzt werden. Dies würde jedoch offensichtlich nichtshift
verwenden, sondern nur eine identische Ausgabe erzeugen.