Was bedeutet $* in einem Shell-Skript?

Was bedeutet $* in einem Shell-Skript?

Ich habe in einer Shell-Skriptdatei „$*“ gesehen. Was bedeutet es und wann müssen wir es verwenden?

Antwort1

Ausbash(1)

Spezielle Parameter

Einige Parameter werden von der Shell besonders behandelt. Auf diese Parameter kann nur verwiesen werden; eine Zuweisung an sie ist nicht zulässig.

* Erweitert auf die Positionsparameter, beginnend bei eins. Wenn die Erweiterung in doppelten Anführungszeichen erfolgt, wird sie auf ein einzelnes Wort erweitert, wobei der Wert jedes Parameters durch das erste Zeichen der IFSspeziellen Variable getrennt ist. Das heißt, "$*"ist äquivalent zu "$1c$2c…", wobei c das erste Zeichen des Wertes der IFSVariable ist. Wenn IFSnicht gesetzt ist, werden die Parameter durch Leerzeichen getrennt. Wenn IFSnull ist, werden die Parameter ohne dazwischenliegende Trennzeichen verbunden.

@ Erweitert auf die Positionsparameter, beginnend bei eins. Wenn die Erweiterung in Anführungszeichen erfolgt, wird jeder Parameter zu einem separaten Wort erweitert. Das heißt, "$@"ist gleichbedeutend mit "$1" "$2" …. Wenn die Erweiterung in Anführungszeichen innerhalb eines Wortes erfolgt, wird die Erweiterung des ersten Parameters mit dem Anfangsteil des ursprünglichen Wortes verbunden und die Erweiterung des letzten Parameters mit dem letzten Teil des ursprünglichen Wortes. Wenn keine Positionsparameter vorhanden sind, wird "$@"und $@zu nichts erweitert (d. h., sie werden entfernt).

Im Grunde handelt es sich dabei $*um eine spezielle Variable, deren Wert die Parameter des Skripts (oder der Shell-Funktion) sind. In den meisten Fällen "$@"ist dies angemessener.

Antwort2

Dies entspricht allen Parametern, die an das Skript übergeben werden. In Ihrem Beispiel ist es in Anführungszeichen eingeschlossen. Dies ist wichtig, da die Anführungszeichen die (vermutlich) Leerzeichen zwischen den Parametern einschließen. Das Weglassen der Anführungszeichen in Shell-Skripten kann häufig eine Fehlerquelle sein.

Hier im Fall von Bash aus der Manpage entnommen:

 *      Expands to the positional parameters, starting from one.  When the expansion  occurs
          within  double  quotes, it expands to a single word with the value of each parameter
          separated by the first character of the IFS special  variable.   That  is,  "$*"  is
          equivalent  to  "$1c$2c...",  where c is the first character of the value of the IFS
          variable.  If IFS is unset, the parameters are separated by spaces.  If IFS is null,
          the parameters are joined without intervening separators.

Prost

sc.

verwandte Informationen