zsh:读取直到EOF代替换行

时间:2018-10-05 06:34:49

标签: zsh

如何使用内置的read在zsh中完成以下代码来收集输出行

ls -l |
{
   read total ; 
   IFS=$'\n' read -dX -A lines  # <-- what should be the delimiter to denote EOF
}

具体地说,ls -l首先将打印一行total nnn,该行应读入$total。以下所有行应收集到数组$lines中。

我应该指定什么为EOF(放在X的位置)?我的申请实际上更复杂。因此,请不要建议使用while逐行读取并追加到数组中。

1 个答案:

答案 0 :(得分:0)

一种方法是使用

ls -l | {
read total;
lines=(${(f)"$(cat)"})
}

说明:

  1. "$(cat)"将其余行转换为包含换行符的字符串
  2. ${(f)...}将在换行符处分割字符串
  3. 最外面的(...)创建一个数组