it-swarm.com.de

Was bedeutet $ @ in einem Shell-Skript?

Was bedeutet ein Dollarzeichen gefolgt von einem At-Zeichen (@) in einem Shell-Skript bedeuten?

Zum Beispiel:

umbrella_corp_options [email protected]
149
trusktr

[email protected] Ist alle der Parameter, die an das Skript übergeben werden.

Wenn Sie beispielsweise ./someScript.sh foo bar Aufrufen, ist [email protected] Gleich foo bar.

Wenn Sie tun:

./someScript.sh foo bar

und dann innerhalb der Referenz someScript.sh:

umbrella_corp_options "[email protected]"

dies wird an umbrella_corp_options übergeben, wobei jeder einzelne Parameter in doppelte Anführungszeichen eingeschlossen wird. Auf diese Weise können Parameter mit Leerzeichen vom Aufrufer übernommen und weitergegeben werden.

200
Har

[email protected] Ist fast dasselbe wie $* Und bedeutet "alle Befehlszeilenargumente". Sie werden oft verwendet, um alle Argumente einfach an ein anderes Programm zu übergeben (und so einen Wrapper um dieses andere Programm zu bilden).

Der Unterschied zwischen den beiden Syntaxen wird sichtbar, wenn Sie ein Argument mit Leerzeichen (z. B.) haben und [email protected] In doppelte Anführungszeichen setzen:

wrappedProgram "[email protected]"
# ^^^ this is correct and will hand over all arguments in the way
#     we received them, i. e. as several arguments, each of them
#     containing all the spaces and other uglinesses they have.
wrappedProgram "$*"
# ^^^ this will hand over exactly one argument, containing all
#     original arguments, separated by single spaces.
wrappedProgram $*
# ^^^ this will join all arguments by single spaces as well and
#     will then split the string as the Shell does on the command
#     line, thus it will split an argument containing spaces into
#     several arguments.

Beispiel: Anrufen

wrapper "one two    three" four five "six seven"

wird darin enden, dass:

"[email protected]": wrappedProgram "one two    three" four five "six seven"
"$*": wrappedProgram "one two    three four five six seven"
                             ^^^^ These spaces are part of the first
                                  argument and are not changed.
$*:   wrappedProgram one two three four five six seven
88
Alfe

Dies sind die Befehlszeilenargumente, bei denen:

[email protected] = speichert alle Argumente in einer Stringliste
$* = speichert alle Argumente als einzelne Zeichenfolge
$# = speichert die Anzahl der Argumente

29
Sameer Duwal

Die Verwendung eines reinen [email protected] bedeutet in den meisten Fällen "den Programmierer so schwer wie möglich verletzen", da dies in den meisten Fällen zu Problemen mit der Worttrennung und mit Leerzeichen und anderen Zeichen in Argumenten führt.

In (erratenen) 99% aller Fälle muss es in ": "[email protected]" kann verwendet werden, um die Argumente zuverlässig zu durchlaufen.

for a in "[email protected]"; do something_with "$a"; done
9
glglgl

Aus dem Handbuch:

@

Erweitert die Positionsparameter, beginnend mit eins. Wenn die Erweiterung in doppelten Anführungszeichen erfolgt, wird jeder Parameter zu einem separaten Wort erweitert. Das heißt, "$ @" entspricht "$ 1" "$ 2" .... Wenn die Erweiterung in doppelten Anführungszeichen in einem Word auftritt, wird die Erweiterung des ersten Parameters mit dem Anfangsteil des ursprünglichen Words und dem Die Erweiterung des letzten Parameters wird mit dem letzten Teil des ursprünglichen Words verbunden. Wenn keine Positionsparameter vorhanden sind, werden "$ @" und $ @ zu nichts erweitert (d. H. Sie werden entfernt).