Cosa significa $ @ come parametro della funzione di script bash


16

Cosa $@significa parametro della funzione script bash?

Esempio:

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

Risposte:


20

La $@variabile si espande a tutti i parametri utilizzati quando si chiama la funzione, quindi

function foo()
{
    echo "$@"
}

foo 1 2 3

sarebbe visualizzato 1 2 3. Se non utilizzato all'interno di una funzione, specifica tutti i parametri utilizzati quando si chiama lo script. Vedi la pagina del manuale di bash per maggiori informazioni.


11

$ @ è una delle due rappresentazioni del "parametro posizionale" in bash, l'altra è $ *.

Entrambi, $ @ e $ * sono variabili bash interne che rappresentano tutti i parametri passati in una funzione o uno script, con una differenza di chiave , $ @ ha ogni parametro come una stringa tra virgolette separata, mentre $ * ha tutti i parametri come una singola stringa. Tale differenza è mostrata nel seguente codice:

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

Produzione:

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

Nota, quando chiamato con $ *, esattamente un argomento viene passato a foo (), ma con $ @ tre argomenti vengono passati a foo ().

Maggiori informazioni: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF


0

Mi aspetto che significhi prendere come hash tutti i parametri di input. Quindi, se ci sono 3 parametri di input, saranno disponibili all'interno della funzione sotto forma di $ 1, $ 2, $ 3


2
No, è una variabile interna che significa tutti i parametri dati a una funzione. Sono comunque disponibili come $1, $2ecc., Indipendentemente da $@.
terdon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.