【发布时间】:2011-06-11 06:04:51
【问题描述】:
这是我逐行读取文件的方法:
while read ROW
do
...
done < file
我不使用其他语法
cat file | while read ROW
do
...
done
因为管道创建了一个子外壳并使我丢失了环境变量。 如果文件不以换行符结尾,则会出现问题:未读取最后一行。后一种语法很容易解决这个问题,只需回显一个换行符:
(cat file; echo) | while read ROW
do
...
done
如何在不打开子shell 也不创建临时文件(列表很大)的情况下在前一种语法中做同样的事情?
【问题讨论】:
-
我指定:“丢失环境变量”是指在循环内部所做的更改在外部不可见(例如计数器)。当然,在循环中我仍然可以访问继承的变量。
-
也许我没有正确模拟结果,但是您使用的是什么版本的 bash?我正在使用 bash4 并且在读取最后一行时遇到问题,无论是否有最后一个新行。
-
bash 4.1.5。也许你应该检查换行符的种类(\r、\n 或两者,mac linux 或 win-style)