Aşağıdakilerin çıktısını my_commandbir 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_commandkarakterin çıktısını da bölüştürdüm . Bunu da kontrol ettim:nprint -l $array_of_lines
echo $array_of_lines[1]
echo $array_of_lines[2]
...
İkinci denemede, eklemenin evalyardı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, IFSzsh'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. IFSYalnızca yeni satırlarda ayrılmayı nasıl belirleyebilirim ?
Q3. @fBö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 IFSmu? 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