代码之家  ›  专栏  ›  技术社区  ›  doraemon

zsh:读到EOF而不是换行

zsh
  •  0
  • doraemon  · 技术社区  · 7 年前

    如何在zsh中使用 read 内置以收集输出行

    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 回复  |  直到 7 年前
        1
  •  0
  •   doraemon    7 年前

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

    说明:

    1. "$(cat)" 将剩余行转换为包含换行符的字符串
    2. ${(f)...} 将在换行时拆分字符串
    3. (...) 创建数组