zsh - zsh:读取直到 EOF 而不是换行
问题描述
如何使用read
内置在 zsh 中完成以下代码以收集输出行
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
逐行读取并追加到数组中。
解决方案
一种方法是使用
ls -l | {
read total;
lines=(${(f)"$(cat)"})
}
解释:
"$(cat)"
将剩余的行转换为包含换行符的字符串${(f)...}
将在换行符处拆分字符串- 最外层
(...)
创建一个数组
推荐阅读
- javascript - 如何使用柏树为图标编写点击功能
- laravel - niklasravnsborg / laravel-pdf - 不同的页眉/页脚
- python - 搜索元素并返回列表列表中的列表
- typescript - MaterialTopTabNavigator 给出错误最大深度超出
- ruby-on-rails - Rails类'ActionController :: Metal'上的'Metal'是什么意思
- azure - 在 Kubernetes 中以集群模式设置 Tomcat 引发超时异常
- batch-file - 批处理脚本 | 命令运行时闪烁屏幕
- django - 如何在 Django 中使用唯一但为空的字段保存模型
- prometheus - how to display the rate at which requests are being received over a certain time interval in grafana
- python - 外键约束形成错误——python sqlalchemy