Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用shell逐行读取文件_Shell_Loops_Io Redirection_Ifs - Fatal编程技术网

使用shell逐行读取文件

使用shell逐行读取文件,shell,loops,io-redirection,ifs,Shell,Loops,Io Redirection,Ifs,逐行读取.txt文件的正确语法为: while IFS= read -r line do echo "$line" done < input_file 当IFS=read-r行时 做 回音“$line” 完成

逐行读取.txt文件的正确语法为:

while IFS= read -r line
do
    echo "$line"
done < input_file
当IFS=read-r行时
做
回音“$line”
完成

我不明白为什么在我们放置
时它工作得很好,这是因为
的条件while
(实际上是一个命令列表)是在每次迭代中执行和评估的,包括重定向。而
done
之后的重定向对于整个循环构造只发生一次

因此,在第一种情况下,
read
始终读取新打开的
input_文件的第一行,而在第二种情况下,它保持从同一文件描述符(stdin)读取行


其工作方式与上一节相同,但由于管道的原因,效率较低。输出流从左向右运行,而不是从右向左运行。这通常更容易理解。cat input_文件的输出被送入(管道)while循环,每一行都被读取,直到输出/文件结束。

您不应推广cat的无用用途。如果要读取多个文件,则会有一个有用的用途。
while IFS= read -r line < input_file
do
    echo "$line"
done
while IFS= read -r line
do
    echo "$line"
done < input_file
cat input_file | while IFS= read -r line
do
    echo "$line"
done