Kullanarak "$@"tüm argümanlar sadece ilk argümanı geçecekleri cdyere $1geçecektir.
Senin örneklerinde
$ . cdtest.sh "r st"
her zaman sadece bir argümandan geçerken çalışır, ancak bir bayrak gibi
$ . cdtest.sh -L "r st"
O zaman sadece dizini tamamen kaybedecek "$@"şekilde "$1"genişleyeceği yerde doğru şekilde çalışacaktır cd -L.
ancak
$ . cdtest.sh r st
Her iki durumda da cd'ye iki parametre ilettiğinizde başarısız olur rve stbu cd'yi yürütmek için geçerli bir yol değildir. Parametreler, r\ sttek bir argüman olarak değerlendirilmek üzere alıntılanması (ilk örneğinizde olduğu gibi) veya kaçılmış ( ) boşluklarla ayrılır .
Ancak cd durumunda bayrakların geçmesi çok nadirdir ve birden fazla dizine geçemezsiniz, bu nedenle gerçek ya "$1"da "$@"cd kullanımının dünyadaki farkını göremezsiniz . Ancak diğer komutlar için bir fark göreceksiniz , bu nedenle "$@"bir sarmalayıcı işlevi veya böyle bir komut dosyası oluşturmak istediğinizde her zaman kullanmanız en iyisidir .
cd "$*"Ayrıca 1'den fazla argüman ile düzgün çalışmayacak.