Risposte:
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.
$ @ è 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
$1,$2ecc., Indipendentemente da$@.