while 循环中的“done < file”如何工作?

while 循环中的“done < file”如何工作?

在尝试学习如何在 bash 中操作文件内容时,我遇到了以下代码示例:

while IFS=, read -r col1 col2
do
    echo "I got:$col1|$col2"
done < myfile.csv

根据The Open Group 基本规范第 6 期:

读取实用程序应从标准输入读取一行。

如果我的理解是正确的,这意味着,例如,如果我想read从 读取行myfile.csv,我应该添加< myfile.csv到命令的末尾read,例如:

read -r col1 col2 < myfiles.csv

然而,在所附代码中,< myfile.csv被附加在done关键字之后。这是为什么?

答案1

出于本例中重定向的目的,while 循环中所有内容(包括条件)的标准输入将是myfile.csv

您可以按照您的建议重定向它,但随后将为每个要读取的调用单独设置重定向,并且每次都会只读取第一行。

相关内容