Panduan Bash ini mengatakan:
Jika nomor indeks adalah @ atau *, semua anggota array direferensikan.
Ketika saya melakukan ini:
LIST=(1 2 3)
for i in "${LIST[@]}"; do
echo "example.$i "
done
Memberi: example.1 example.2 example.3
(hasil yang diinginkan).
Tapi ketika saya gunakan ${LIST[*]}
, saya mengertiexample.1 2 3
sebagai gantinya.
Mengapa?
Sunting: ketika menggunakan printf, @ dan * sebenarnya memberikan hasil yang sama.
echo $SHELL
dan tempel output ke pertanyaan Anda.echo
, bukan denganprintf
, saya baru saja perhatikan.$*
dan$@
. Meskipun, jawabannya akan serupa dan satu pertanyaan dapat dianggap sebagai bagian dari yang lain, mereka adalah pertanyaan yang berbeda.Jawaban:
Perbedaannya halus; "$ *" menciptakan satu argumen, sementara "$ @" akan berkembang menjadi argumen terpisah, jadi:
akan berurusan dengan daftar (cetak) sebagai beberapa variabel
tapi
akan berurusan dengan daftar sebagai satu variabel.
sumber
echo
danprintf
berasal? Karena denganprintf
di dalam for loop, referensi daftar * diperlakukan sebagai beberapa variabel.