Was bedeutet $ @ als Funktionsparameter eines Bash-Skripts?

16

Was $@bedeutet "Funktionsparameter eines Bash-Skripts"?

Beispiel:

function foo()
{
    echo "$@" 1>&2;
}
Dave
quelle

Antworten:

20

Die $@Variable wird auf alle Parameter erweitert, die beim Aufrufen der Funktion verwendet werden

function foo()
{
    echo "$@"
}

foo 1 2 3

würde anzeigen 1 2 3. Wenn es nicht in einer Funktion verwendet wird, werden alle Parameter angegeben, die beim Aufrufen des Skripts verwendet werden. Weitere Informationen finden Sie in der bash-Handbuchseite .

brm
quelle
11

$ @ ist eine der beiden "Positionsparameter" -Darstellungen in der Bash, die andere ist $ *.

Sowohl $ @ als auch $ * sind interne Bash-Variablen, die alle Parameter darstellen, die an eine Funktion oder ein Skript übergeben wurden. Mit einem wesentlichen Unterschied hat $ @ jeden Parameter als separate Zeichenfolge in Anführungszeichen, während $ * alle Parameter als einzelne Zeichenfolge hat. Dieser Unterschied wird im folgenden Code gezeigt:

foo() {
  while [ "$1" != "" ]; do
      echo $1
    shift
  done
}

dollar_at () {
    foo "$@"
}

dollar_star () {
    foo "$*"
}

echo "Using \$@"
dollar_at a b c

echo "Using \$*"
dollar_star a b c

Ausgabe:

Using $@
a
b
c
Using $*
a b c

Beachten Sie, dass bei einem Aufruf mit $ * genau ein Argument an foo () übergeben wird, bei $ @ jedoch drei Argumente an foo ().

Weitere Informationen: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF

Rubel
quelle
0

Ich gehe davon aus, dass dies bedeutet, dass alle Eingabeparameter als Hash verwendet werden. Wenn es also 3 Eingabeparameter gibt, stehen diese in der Funktion in Form von $ 1, $ 2, $ 3 zur Verfügung

Dave
quelle
2
Nein, es ist eine interne Variable, die alle Parameter einer Funktion angibt. Sie sind als $1, $2usw. wie auch immer, unabhängig von $@.
Terdon