bash while循环和用于读取的文件句柄

时间:2018-05-09 07:06:00

标签: bash

我试图在循环时更多地了解bash shell。

方法1: while read < myfile LINE; do echo $LINE; done
方法2: while read LINE; do echo $LINE; done < myfile

每次循环迭代时,方法1只从myfile中读取第一行。

方法2在每次循环迭代时读取下一行。

我假设原因是,在方法1中,每次循环迭代时都会执行输入重定向(<),每次都关闭并打开文件句柄。

我的问题是,如何在shell中进行调查,以及在哪里可以找到有关shell的更多详细信息。

1 个答案:

答案 0 :(得分:0)

  

方法1: while read < myfile LINE; do echo $LINE; done

只是为了分解正在发生的事情:LINE命令从标准输入复制第一行,因此在这种情况下它将复制“myfile”的第一行。然后它将输出发送到READ命令。这个while循环的传递条件是READ的东西,所以只要有东西被传递给READ,while循环就会运行。因此,如果“myfile”为空或不存在,则while循环将停止或不运行以开始。 $ LINE将保存“myfile”中第一行的值,因此每次while循环运行时它只打印第一行。

  

方法2: while read LINE; do echo $LINE; done < myfile

这对你来说可能更有意义。您将“myfile”指向LINE作为while循环条件而不是方法1,而您的while条件是仅读取“myfile”的第一行。

您应该使用MAN命令获取命令的手册页以查找更多信息。

$ man line

http://man7.org/linux/man-pages/man1/line.1.html

http://man7.org/linux/man-pages/man2/read.2.html

您可以使用另一个在线工具来查看正在发生的事情https://explainshell.com/