首页 > 解决方案 > 在 Zsh 中循环文件的内容

问题描述

我正在尝试遍历 zsh 中文件的内容。在我的循环中,我想获得用户输入。离开这个 Bash 的答案,我正在尝试做:

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

但是我收到一个错误:

zsh: parse error near `10'

10done. 显然我没有得到正确的文件描述符语法,但我无法弄清楚文档。

标签: zshfile-descriptor

解决方案


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

如果您甚至需要超过 7 个可用的硬编码文件描述符,那么您真的应该考虑使用变量来命名它们。语法 likeexec {myfd}<myfile.txt将使用 zsh 打开一个文件,分配一个大于 10 的文件描述符并将其分配给$myfd.

鉴于文件描述符编号为 10 及以上,甚至在 bash 中,Bourne shell 语法并非完全明确,我建议不要使用它们。如果 bash 需要打开任何供内部使用,我不完全确定它如何避免冲突——我想它永远不需要打开任何东西。乍一看,这可能看起来像 zsh 限制,但实际上是一个明智的功能。


推荐阅读