Aşağıdakilerin çıktısını my_command
bir dizi dizide gruplayacağını düşündüm :
IFS='\n' array_of_lines=$(my_command);
böylece $array_of_lines[1]
çıkış ilk satır bakın olur my_command
, $array_of_lines[2]
vb ikinci, vb.
Ancak, yukarıdaki komutun iyi çalışması görünmüyor. Ayrıca , bir dizi satır öğelerini satır satır yazdırdığına inanıyorum ki kontrol ettiğim gibi my_command
karakterin çıktısını da bölüştürdüm . Bunu da kontrol ettim:n
print -l $array_of_lines
echo $array_of_lines[1]
echo $array_of_lines[2]
...
İkinci denemede, eklemenin eval
yardımcı olabileceğini düşündüm :
IFS='\n' array_of_lines=$(eval my_command);
ama bununla aynı sonucu aldım.
Son olarak, zsh içindeki boşlukları içeren liste öğelerinin cevabını izleyerek, IFS
zsh'ye girdiyi nasıl bölen ve öğeleri bir diziye nasıl toplayacağımızı söylemek yerine, parametre genişletme bayraklarını kullanmayı da denedim.
array_of_lines=("${(@f)$(my_command)}");
Ama yine de aynı sonucu aldım (bölünme oluyor n
)
Bununla, aşağıdaki soruları var:
S1. Ne "doğru" satırları dizideki bir komutun çıktısını toplama yolları?
S2. IFS
Yalnızca yeni satırlarda ayrılmayı nasıl belirleyebilirim ?
Q3. @f
Bölünmeyi belirtmek için yukarıdaki üçüncü denememdeki gibi (yani kullanarak ) parametre genişletme bayraklarını kullanırsam , zsh değeri yok sayıyor IFS
mu? Neden yukarıda işe yaramadı?
"${(@f)...}"
aynı${(f)"..."}
, ancak farklı bir şekilde.(@)
İçinde çift tırnak "dizi başına bir kelime ver"(f)
anlamına gelir ve "bir satır içine yeni satır ile bölmek " anlamına gelir. Not: Lütfen dokümanlar ile