Tüm liste bağlamlarında değişkenlerin etrafında her zaman tırnaklara ihtiyacınız vardır ; bu, değişkeni tırnaksız bırakmaktan üç yan etki istemediğiniz sürece, değişkenin birden çok değere genişletilebileceği yerdir.
Liste bağlamları gibi basit komutlara argümanları şunlardır [ya echo, for i in <here>... değişkenler de alıntı gereken başka bağlam vardır ödevler diziler için. En iyisi, yapmamak için çok iyi bir nedeniniz olmadığı sürece değişkenleri alıntılamaktır.
Split + glob operatörü olarak tırnak (liste bağlamında) yokluğunu düşünün .
Sanki echo $testöyleydi echo glob(split("$test")).
Kabuk davranışı çoğu insan için kafa karıştırıcıdır, çünkü diğer birçok dilde, sabit dizgilere, puts("foo")değişkenler gibi (değişkenler gibi puts(var)) tırnaklar koyarsınız ; hantal olurdu, sen echo test, gerek yok "echo" "test". Kabukta, tırnaklar başka bir şey için kullanılır: bazı karakterlerin bazı özel anlamlarını önler ve / veya bazı genişlemelerin davranışını etkiler.
Gelen [ -n $test ]veya echo $testkabuk bölecek $test(varsayılan olarak boşlukları üzerine) ve ardından dosya adı üretimi yapan (tümünü genişlet *, '?' ... desenleri eşleştirme dosyalar listesine) ve daha sonra bağımsız değişkenlerin o listeyi geçmesi [veya echokomutlar .
Yine, bunu düşün "[" "-n" glob(split("$test")) "]". Eğer $testboşsa veya sadece kuru sıkı (SPC, sekme, nl) içerecek şekilde, daha sonra bölünmüş + glob operatörü, boş bir listesini döndürecektir [ -n $test ]olacak "[" "-n" "]""-n" boş dize olup olmadığını wheter kontrol etmek için bir test olan. Ama $test"*" ya da "= foo" olsaydı neler olacağını düşünün
Olarak [ -n "$test" ], [dört bağımsız değişken geçirilir "[", "-n", ""ve "]"ne istediğimizi olan (tırnaklar olmadan).
O olsun echoya [hiç fark etmez, sadece o var echoaynı şey çıkışları boş bir argüman ya da hiç argüman geçirilen olsun.
Komut ve yapı hakkında daha fazla ayrıntı için benzer bir soruya bu cevaba bakınız .[[[...]]
echo, fazladan boşluklar ve yeni satırlar kaldırılır.