zsh - 在 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'
后10
指done
. 显然我没有得到正确的文件描述符语法,但我无法弄清楚文档。
解决方案
使用小于 10 的文件描述符编号。如果要对文件描述符编号进行硬编码,请坚持 3-9 的范围(对于 stdin、out、err 加上 0-2)。当 zsh 本身需要文件描述符时,它会在 10+ 范围内使用它们。
如果您甚至需要超过 7 个可用的硬编码文件描述符,那么您真的应该考虑使用变量来命名它们。语法 likeexec {myfd}<myfile.txt
将使用 zsh 打开一个文件,分配一个大于 10 的文件描述符并将其分配给$myfd
.
鉴于文件描述符编号为 10 及以上,甚至在 bash 中,Bourne shell 语法并非完全明确,我建议不要使用它们。如果 bash 需要打开任何供内部使用,我不完全确定它如何避免冲突——我想它永远不需要打开任何东西。乍一看,这可能看起来像 zsh 限制,但实际上是一个明智的功能。
推荐阅读
- php - 带有 PHP 函数的数据库值
- android-layout - 在 AndoidStudio 中进行布局
- python - Python,列表追加递归
- android - WorkManager 运行的作业不超过 20 个
- javascript - 图像作为切换隐藏/显示按钮
- flutter - 为什么我得到 Gradle task assemble Debug failed 错误
- php - SQL在同一张表中减去2列
- date - 无法在 JMeter 中传递动态和唯一的日期值
- swift - Swift:初始化抛出时如何释放属性?
- python - 使用 python 构建最大堆我遇到了错误的输出