$@mengembang menjadi kata-kata yang terpisah (sedangkan $*mengembang menjadi satu kata), seperti yang dijelaskan dalam bashmanual . Jadi, ketika Anda menulis
zenity --text="$@"
itu berkembang menjadi
zenity --text="$1" "$2" "$3"
Namun, tugas variabel shell tidak mengalami pemisahan kata. Perhatikan bahwa pemisahan bidang / kata dihilangkan dalam daftar ekspansi untuk penugasan variabel dalam bashmanual . Perilaku ini konsisten dengan spesifikasi POSIX . Jadi, ketika Anda menulis
text="$@"
variabel textmendapatkan semua parameter posisi sebagai satu kata, setara dengan jika Anda telah menulis text="$*". Memang, ini adalah alasan kutip ganda sering tidak perlu dalam penugasan variabel. Kedua
text=$@
dan
text=$*
sangat aman.
Begitu,
text=$@
zenity --option="$text"
meluas "$text"ke satu kata, itulah sebabnya ini bekerja. Perhatikan bahwa --option="$@"ini hanya argumen normal untuk perintah zenity, dan bukan penugasan variabel shell, itulah sebabnya pemisahan kata terjadi di sini tetapi tidak di text=$@.
zenity --text="$*"-"$*"meluas ke satu kata.