【问题标题】:bash while loop and the file handle for readbash while 循环和用于读取的文件句柄
【发布时间】:2018-05-09 21:46:44
【问题描述】:

我正在尝试更多地了解 bash shell while 循环。

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

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

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

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

我的问题是,我如何在 shell 中调查这个问题,我在哪里可以找到更多关于 shell 的详细信息。

【问题讨论】:

标签: bash


【解决方案1】:

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

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

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

这对您现在可能更有意义。您指示“myfile”作为 while 循环条件由 LINE 读取,而不是在方法 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/

【讨论】:

  • Jake 关于 Method1 的注释不正确。没有使用 line 命令。
  • 但是如果你运行:'while read
  • 看起来您在引用 Method1 时打错了字。 Method1 应该运行一个无限循环,每次只打印第一行,除非 myfile 为空。
猜你喜欢
  • 2012-01-24
  • 1970-01-01
  • 2023-02-07
  • 2014-10-27
  • 2013-10-12
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多