Dalam banyak pertanyaan SO dan tutorial bash, saya melihat bahwa saya dapat mengakses argumen baris perintah dalam skrip bash dalam dua cara:
$ ~ >cat testargs.sh
#!/bin/bash
echo "you passed me" $*
echo "you passed me" $@
Yang mengakibatkan:
$ ~> bash testargs.sh arg1 arg2
you passed me arg1 arg2
you passed me arg1 arg2
Apa perbedaan antara $*
dan $@
?
Kapan seseorang harus menggunakan yang pertama dan kapan akan menggunakan yang kedua?
bash
command-line-arguments
Oz123
sumber
sumber
echo "something $@"
sebagai kesalahanJawaban:
Perbedaannya muncul ketika parameter khusus dikutip. Biarkan saya menggambarkan perbedaan:
satu contoh lebih lanjut tentang pentingnya mengutip: perhatikan ada 2 spasi antara "arg" dan nomornya, tetapi jika saya gagal mengutip $ word:
dan dalam bash,
"$@"
adalah daftar "default" untuk beralih:sumber
$*
atau"$*"
mungkin diperlukan, & tujuannya tidak dapat dilayani oleh$@
atau"$@"
?"$@"
dengan tanda kutip.Tabel ikhtisar berguna yang berguna dari Bash Hackers Wiki :
c
di mana di baris ketiga adalah karakter pertama$IFS
, Pemisah Bidang Internal, variabel shell.Jika argumen akan disimpan dalam variabel skrip dan argumen diharapkan berisi spasi, saya dengan sepenuh hati merekomendasikan menggunakan
"$*"
trik dengan pemisah bidang internal yang$IFS
diatur ke tab .sumber
$IFS
singkatan dari "Internal Field Separator."$ *
$ @
Sumber: Bash man
sumber
$ @ sama dengan $ *, tetapi setiap parameter adalah string yang dikutip, yaitu, parameter dilewatkan secara utuh, tanpa interpretasi atau ekspansi. Ini berarti, antara lain, bahwa setiap parameter dalam daftar argumen dilihat sebagai kata yang terpisah.
Tentu saja, "$ @" harus dikutip.
http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
sumber
Contoh ini dapat menyoroti perbedaan antara "at" dan "asterix" saat kami menggunakannya. Saya menyatakan dua array "buah-buahan" dan "sayuran"
Lihat hasil berikut kode di atas:
sumber