Wie alle übergeben Argumente, um meine bash-Skript eine Funktion von mir?
Sagen wir mal ich habe eine function abc()
behandelt die Logik im Zusammenhang mit der Analyse der Argumente, die übergeben wird, um mein Skript.
Wie kann ich alle übergeben Argumente, die meine bash-Skript erhalten hat, um es? Die Anzahl der Parameter variabel ist, so kann ich nicht nur fest die übergebenen Argumente wie diese:
abc $1 $2 $3 $4
Bearbeiten. Besser noch, gibt es eine Möglichkeit, für meine Funktion, um Zugriff auf die Skript-Argumente' Variablen?
möglich, Duplikat der ALLE Übergeben Argumente von Bash-Skript zu einem Anderen Befehl
InformationsquelleAutor devoured elysium | 2010-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
$@
variable erweitert, um alle Kommandozeilen-Parameter, die durch Leerzeichen voneinander getrennt. Hier ist ein Beispiel.Bei der Verwendung
$@
sollten Sie (fast) immer setzen Sie es in doppelte Anführungszeichen zu vermeiden misparsing argument mit Leerzeichen. Dies funktioniert für mehrere Argumente.$*
weitergegeben werden, als eine lange Zeichenfolge.Ist es auch nichts Wert, dass
$0
ist nicht in$@
.Den Bash Reference Manual Special-Sektion sagt, dass
@
erweitert, um die positiaonl Parameter ausgehend von einem. Wenn die expansion erfolgt innerhalb von doppelten Anführungszeichen stehen, werden die einzelnen parameter erweitert, um eine separate word. Das ist"$@"
entspricht"$1" "$2" "$3"...
.Wenn Sie übergeben möchten alle, aber die ersten Argumente, können Sie zunächst mit
shift
zu "verbrauchen", das erste argument und dann pass$@
übergeben werden, die restlichen Argumente zu einem anderen Befehl. In der bash (aber nicht im nur-POSIX-shells), Sie können dies tun, ohne Unordnung mit dem argument-Liste einer Variante der array slicing:"${@:3}"
bekommen Sie die Argumente, beginnend mit"$3"
."${@:3:4}"
erhalten Sie bis zu vier Argumente ab"$3"
(d.h."$3" "$4" "$5" "$6"
), wenn, dass viele Argumente übergeben wurden.InformationsquelleAutor Gordon Davisson
Brauchte ich eine variation davon, die ich erwarte, wird nützlich sein, andere:
Den
"${@:3}"
Teil bedeutet, dass alle Mitglieder des array, beginnend bei 3. Also diese Funktion implementiert eine sortierte diff indem die ersten beiden Argumente diff durch Sortieren und dann passen alle anderen Argumente zu diff, so kann man es nennen, ähnlich wie diff:"${@:3}"
ist auch toll, wenn Sie Skripts, die haben Argumente, aber auch Argumente, um andere Skripts, die Sie aufrufen. Zum Beispiel, ein Projekt von mir hat ein Skript für einfach das Programm ausführen, mit einem argument für die main-Klasse zu verwenden. Dann"${@:2}"
übergeben werden die restlichen Argumente auf diesen Einstiegspunkt.schon erwähnt, aber zur Klärung (falls Sie noch Zweifel haben):
command "$@"
entsprichtcommand $1 "${@:2}"
.InformationsquelleAutor hajamie
Verwenden Sie die
$@
variable, die erweitert wird, um alle Kommandozeilen-Parameter, die durch Leerzeichen voneinander getrennt.InformationsquelleAutor Mia Clarke
Hier ist ein einfaches Skript:
$#
ist die Anzahl der Argumente erhalten, indem Sie das Skript. Ich finde leichter Zugang zu Ihnen, mit einem array: dieargs=("$@")
line stellt alle Argumente in derargs
array. Um Ihnen den Zugang verwenden${args[index]}
.${args[0]}
für das erste argument 😮Danke. Sehr hilfreich!!!
Was nützt übergeben $@ in ein array liefern nur über den Aufruf der Argumente, die durch den index (Z $1)?
Irgendwie habe ich es verpasst. Fixed, danke für den Hinweis it out.
Alle zukünftigen Leser sollten beachten Sie, dass die shebang in diesem Beispiel ist falsch. sh unterstützt keine arrays, das ist eine bash-Funktion. Der einzige Grund, warum das funktionieren könnte ist, wenn dein OS hat symlinked
/bin/sh
bash oder Sie rufen das Skript mitbash script.sh
.InformationsquelleAutor Giuseppe Cardone
Es ist erwähnenswert, dass können Sie angeben argument reicht mit dieser syntax.
Ich hatte nicht gesehen, dass es erwähnt.
$1
,$2
,... für die ersten zweiHabe ich korrigiert, der Wortlaut meiner Antwort auch "Spektrum" durch.
InformationsquelleAutor robstarbuck
$@
stellt alle Parameter gegeben, um Ihre bash-Skript.$@
verlieren Sie das richtige Wort aufteilenInformationsquelleAutor Vivien Barousse
abc "$@" ist in der Regel die richtige Antwort.
Aber ich habe versucht, übergeben Sie einen parameter durch eine su-Befehl, und kein Betrag der Quotierung zu stoppen könnte der Fehler
su: unrecognized option '--myoption'
. Was wirklich für mich gearbeitet wurde die übergabe aller Argumente als eine einzelne Zeichenfolge :Meinen genauen Fall (ich bin sicher, dass jemand muss diese) war in meinem .bashrc
abc
BeispielGenau das, was ich brauchte. Mein Befehl war eingewickelt in Anführungszeichen, und das war das einzige, was für mich gearbeitet.
InformationsquelleAutor andrew lorien