在Zsh中循环浏览文件的内容

问题描述

我试图遍历zsh中文件内容。在我的循环中,我想获取用户输入。从this answer for Bash开始,我正在尝试做:

while read -u 10 line; do
  echo $line;
  # Todo read from stdin here,etc.
done 10<myfile.txt

但是我得到一个错误

zsh: parse error near `10'

10之后引用done。显然我没有正确使用文件描述符语法,但是在确定文档时遇到了麻烦。

解决方法

使用小于10的文件描述符号。如果要对文件描述符号进行硬编码,请坚持3-9的范围(对于stdin,out,err加0-2)。当zsh本身需要文件描述符时,它将在10+范围内使用它们。

如果您几乎已经需要超过7个可用的硬编码文件描述符,则应该考虑使用变量来命名它们。像exec {myfd}<myfile.txt这样的语法将使用zsh打开文件,并分配大于10的文件描述符并将其分配给$myfd

鉴于文件描述符的编号等于或大于10,甚至使用bash,Bourne Shell语法也不是完全明确的,我建议不要使用它们。我不确定bash是否需要打开任何内部使用的bash才能避免冲突-我猜它永远不需要打开任何东西。乍一看,这可能看起来像是zsh的限制,但实际上是一个明智的功能。