【发布时间】:2014-10-20 17:39:36
【问题描述】:
我正在学习 bash,我在互联网上找到了一个教程,上面说这些是相同的:
while read -r line;
do
...
done < file
$ cat file | while IFS= read -r line;
do
...
done
这两个循环有什么细微差别吗?它们真的一样吗?
【问题讨论】:
-
我的建议:不要解析
cat命令的输出。 -
放大 chepner 已经涉及的内容:一般而言,
cat foo | bar与bar <foo相比,(1) 效率较低,原因有两个:(1a) 创建管道需要额外的 fork( ); (1b) 导致foo首先被cat读取,然后写入管道,然后由bar从管道中读取,效率低于简单地让foo中的内容被bar直接读取. (2) 如果bar是一个可以访问seek()调用的程序(除非您编写了C 扩展,否则通常不适用于bash),给它一个管道而不是一个文件会阻止使用它。 -
两个循环都应该有
IFS=吗? -
@thatotherguy 不,只是第二个循环。
-
IFS= 在第二个循环中到底做了什么?
标签: bash