Apa arti $ @ sebagai parameter fungsi skrip bash

16

Apa yang dimaksud $@dengan parameter fungsi skrip bash?

Contoh:

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

Jawaban:

20

The $@variabel mengembang untuk semua parameter yang digunakan saat memanggil fungsi, sehingga

function foo()
{
    echo "$@"
}

foo 1 2 3

akan ditampilkan 1 2 3. Jika tidak digunakan di dalam suatu fungsi, itu menentukan semua parameter yang digunakan saat memanggil skrip. Lihat halaman manual bash untuk info lebih lanjut.

brm
sumber
11

$ @ adalah salah satu dari dua representasi "parameter posisi" dalam bash, yang lainnya adalah $ *.

Keduanya, $ @ dan $ * adalah variabel bash internal yang mewakili semua parameter yang dilewatkan ke fungsi atau skrip, dengan satu perbedaan kunci , $ @ memiliki setiap parameter sebagai string yang dikutip terpisah, sedangkan $ * memiliki semua parameter sebagai string tunggal . Perbedaan itu ditunjukkan dalam kode berikut:

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

Keluaran:

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

Catatan, ketika dipanggil dengan $ *, tepat satu argumen dilewatkan ke foo (), tetapi dengan $ @ tiga argumen dilewatkan ke foo ().

Info lebih lanjut: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF

rubel
sumber
0

Saya berharap itu berarti mengambil semua parameter input hash. Jadi jika ada 3 parameter input mereka akan tersedia dalam fungsi dalam bentuk $ 1, $ 2, $ 3

Dave
sumber
2
Tidak, ini adalah variabel internal yang berarti semua parameter diberikan ke suatu fungsi. Mereka tersedia sebagai $1, $2dll, terlepas dari $@.
terdon