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 $test
kabuk 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 echo
komutlar .
Yine, bunu düşün "[" "-n" glob(split("$test")) "]"
. Eğer $test
boş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 echo
ya [
hiç fark etmez, sadece o var echo
aynı ş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.