问题描述
我试图遍历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的限制,但实际上是一个明智的功能。