Ich möchte ein Bash-Skript mit einer unbekannten Anzahl von Argumenten schreiben.
Wie kann ich diese Argumente durchgehen und etwas damit anfangen?
Ein falscher Versuch würde so aussehen:
#!/bin/bash
for i in $args; do
echo $i
done
Dafür gibt es eine spezielle Syntax:
for i do
printf '%s\n' "$i"
done
Im Allgemeinen ist die Liste der Parameter des aktuellen Skripts oder der aktuellen Funktion über die spezielle Variable verfügbar $@
.
for i in "$@"; do
printf '%s\n' "$i"
done
Beachten Sie, dass Sie die doppelten Anführungszeichen verwenden müssen $@
, da sonst die Parameter eine Platzhaltererweiterung und Feldaufteilung erfahren. "$@"
ist magisch: Trotz der doppelten Anführungszeichen wird es in so viele Felder erweitert, wie Parameter vorhanden sind.
print_arguments () {
for i in "$@"; do printf '%s\n' "$i"; done
}
print_arguments 'hello world' '*' 'special !\characters' '-n' # prints 4 lines
print_arguments '' # prints one empty line
print_arguments # prints nothing
#! /usr/bin/env bash
for f in "$@"; do
echo "$f"
done
Sie sollten in Anführungszeichen setzen, $@
da Argumente Leerzeichen (oder Zeilenumbrüche usw.) enthalten können, wenn Sie sie in Anführungszeichen setzen oder mit einem Escapezeichen versehen \
. Beispielsweise:
./myscript one 'two three'
Das sind aufgrund der Anführungszeichen eher zwei als drei Argumente. Wenn Sie nicht zitieren $@
, werden diese Argumente im Skript aufgeteilt.
for f; do ...