Kullanarak "$@"
tüm argümanlar sadece ilk argümanı geçecekleri cd
yere $1
geç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 r
ve st
bu cd'yi yürütmek için geçerli bir yol değildir. Parametreler, r\ st
tek 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.