İlk olarak, kullanımının ls
sadece bir örnek olduğunu varsayıyorum . ls
Herhangi 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 ls
komutun çıktısı
hello world
wibble
Daha sonra files=($(ls))
ayarlar files
3 elemanlarını içerdiği dizi: hello
, world
ve 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 ; f
bayrak sadece satırbaşıyla de böler.
files=("${(@f)$(ls)}")
Not genelde dizisi üzerinde yineleme uygun yol olduğunu for f in $files[@]
gibi $files
boş elemanlar (elementler boş olmayacaktır çünkü burada, bu önemli değil) kapalı şeritler.
print $f
$f
a ile başlayıp -
ters eğik çizgi genişliyorsa , bir anahtar olarak yorumlar $f
. Kullanım print -r -- $f
ya print -rn -- $f
sen dize sonra bir yeni satır eklemek istemiyorsanız.