İlk olarak, kullanımının lssadece bir örnek olduğunu varsayıyorum . lsHerhangi bir kabuğun çıktısını ayrıştıramazsınız , çünkü belirsizdir. Bu sizin için haberse neden ls (1) 'in çıktısını ayrıştırmamanız gerektiğini okuyun . Herhangi bir kabukta, dosyaların bir listesini elde etmek için joker karakterler kullanın, örn files=(*).
Zsh'de, diğer kabuklarda olduğu gibi, komut ikamesinin sonucu , boşluk karakterlerinde kelimelere bölünür (daha doğrusu, değerine göre IFS). (Diğer mermilerin aksine, komut ikamesinin sonucu zsh cinsinden globbinge tabi değildir.) Yani lskomutun çıktısı
hello world
wibble
Daha sonra files=($(ls))ayarlar files3 elemanlarını içerdiği dizi: hello, worldve wibble.
Komut ikamesi çift tırnak içindeyse, bölme yapılmaz. Parametre genişletme bayrakları ile özel bölme yapabilirsiniz . @Bölme sonucunun bir dizi olacağını belirtmek için bayrağı kullanın (garip bir şekilde, çift tırnak içinde genişleme çift tırnak içinde tutmanız gerekir, yani "${(@)…}"çift tırnaklı dize birden çok kelimeye genişleyecek olsa da). Bölmek için s, örneğin "${(@s:,:)…}"virgülle bölmek için bayrağı kullanın ; fbayrak sadece satırbaşıyla de böler.
files=("${(@f)$(ls)}")
Not genelde dizisi üzerinde yineleme uygun yol olduğunu for f in $files[@]gibi $filesboş elemanlar (elementler boş olmayacaktır çünkü burada, bu önemli değil) kapalı şeritler.
print $f$fa ile başlayıp -ters eğik çizgi genişliyorsa , bir anahtar olarak yorumlar $f. Kullanım print -r -- $fya print -rn -- $fsen dize sonra bir yeni satır eklemek istemiyorsanız.