哪个是编写从文件读取的循环的最佳方法?

时间:2017-05-14 04:40:06

标签: bash

我正在学习bash并尝试理解这两种从文件中读取行的方法之间的区别。

1

while IFS= read -r line
do
  echo $line
done < "$file"

2

cat $file |
while read data
do
   echo $i
done

基本上我想知道的是: 他们中的任何一个比其他人更常见吗?是否存在性能差异?等

此外,还有其他方法可以从文件中读取更好的文件,特别是在阅读大文件时吗?

2 个答案:

答案 0 :(得分:5)

第二个是无用的猫:http://porkmail.org/era/unix/award.html

我使用done < "$file"表单。

不,在Bash中没有更好的方法。但是消除一个进程(cat)很不错。

答案 1 :(得分:3)

第一种方法有一些优点:

  • 它更直接
  • 它不使用额外的cat和管道
  • 循环在当前shell中运行,而第二种方法使用子shell;在循环内设置或修改的变量可见外部

即使while循环使用另一个命令的输出(通过如下所示的进程替换),第一种方法更好,因为它消除了子shell:

while read -r line; do
  # loop steps
done < <(_command_)

另见: