我认为以下内容将以行的形式对输出进行分组my_command
:
IFS='\n' array_of_lines=$(my_command);
因此,$array_of_lines[1]
它将指向输出中的第一行my_command
,$array_of_lines[2]
指向第二行,依此类推。
但是,上面的命令似乎无法正常工作。就像我检查过的一样,它似乎也将my_command
字符的输出分割开了,我相信它会逐行打印数组的元素。我也用以下方法对此进行了检查:n
print -l $array_of_lines
echo $array_of_lines[1]
echo $array_of_lines[2]
...
在第二次尝试中,我认为添加eval
可能会有所帮助:
IFS='\n' array_of_lines=$(eval my_command);
但我得到的结果与没有它时完全相同。
最后,按照zsh中带空格的List元素的答案,我还尝试了使用参数扩展标志,而不是IFS
告诉zsh如何拆分输入并将元素收集到数组中,即:
array_of_lines=("${(@f)$(my_command)}");
但我仍然得到相同的结果(发生n
)
有了这个,我有以下问题:
Q1。有哪些“适当”的方式来收集多行代码中的命令输出?
Q2。如何指定IFS
仅在换行符上分割?
Q3。如果我在上面的第三次尝试中使用参数扩展标志(即使用@f
)来指定拆分,则zsh是否会忽略IFS
?的值?为什么上面没有用?
"${(@f)...}"
与相同${(f)"..."}
,但方式不同。(@)
内双引号表示“每个数组元素产生一个单词”,(f)
表示“由换行符分割成数组”。PS:请链接到文档