Myślałem, że następujące zgrupuje dane wyjściowe my_commandw tablicy wierszy:
IFS='\n' array_of_lines=$(my_command);
tak $array_of_lines[1]by odnosiło się do pierwszego wiersza na wyjściu my_command, $array_of_lines[2]do drugiego i tak dalej.
Jednak powyższe polecenie wydaje się nie działać dobrze. Wydaje się, że dzieli także wynik my_commandwokół znaku n, jak już sprawdziłem print -l $array_of_lines, co, jak sądzę, drukuje elementy tablicy linia po linii. Sprawdziłem to również za pomocą:
echo $array_of_lines[1]
echo $array_of_lines[2]
...
W drugiej próbie pomyślałem, że dodanie evalmoże pomóc:
IFS='\n' array_of_lines=$(eval my_command);
ale mam dokładnie taki sam wynik jak bez niego.
Wreszcie, podążając za odpowiedzią dotyczącą elementów List ze spacjami w zsh , próbowałem również użyć flag rozwijania parametrów zamiast IFSpowiedzieć zsh, jak podzielić dane wejściowe i zebrać elementy w tablicę, tj .:
array_of_lines=("${(@f)$(my_command)}");
Ale nadal mam ten sam wynik (dzielenie się dzieje n)
W związku z tym mam następujące pytania:
Pytanie 1 Jakie są „właściwe” sposoby gromadzenia danych wyjściowych polecenia w szeregu wierszy?
Q2 Jak mogę określić IFSpodział tylko na nowe wiersze?
Pytanie 3 Jeśli użyję flag rozszerzania parametrów, jak w mojej trzeciej próbie powyżej (tj. Przy użyciu @f), aby określić podział, czy zsh ignoruje wartość IFS? Dlaczego to nie zadziałało powyżej?
"${(@f)...}"jest taki sam jak${(f)"..."}, ale w inny sposób.(@)wewnątrz podwójnych cudzysłowów oznacza „wydaj jedno słowo na element tablicy” i(f)„podziel się na tablicę znakiem nowej linii”. PS: Proszę zamieścić link do dokumentacji