Menggunakan "$@"
akan meneruskan semua argumen ke cd
tempat yang $1
hanya akan melewati argumen pertama.
Dalam contoh Anda
$ . cdtest.sh "r st"
selalu berfungsi karena Anda hanya melewati satu argumen, tetapi jika Anda harus memberikan sebuah flag juga
$ . cdtest.sh -L "r st"
Maka hanya "$@"
akan mengeksekusi dengan benar di mana "$1"
akan berkembang menjadi cd -L
kehilangan direktori sepenuhnya.
Namun
$ . cdtest.sh r st
Gagal dalam kedua kasus saat Anda mengirimkan dua parameter ke cd, r
dan st
yang bukan cara yang valid untuk mengeksekusi cd. Parameter dipisahkan oleh spasi yang harus dikutip (seperti dalam contoh pertama Anda) atau melarikan diri ( r\ st
) untuk diperlakukan sebagai satu argumen.
Dalam kasus cd namun sangat jarang untuk lulus dalam bendera dan Anda tidak bisa lewat di beberapa direktori sehingga Anda tidak akan melihat perbedaan dalam penggunaan dunia nyata baik "$1"
atau "$@"
untuk cd. Tetapi untuk perintah lain, Anda akan melihat perbedaan sehingga praktik terbaik adalah selalu menggunakan "$@"
ketika Anda ingin membuat fungsi pembungkus atau skrip seperti ini.
cd "$*"
juga tidak akan bekerja dengan benar dengan lebih dari 1 arg.