Bash while循环,逐行读取文件

Nar*_*rek 11 bash file-io while-loop

有两种方法可以逐行读取文件,我想在这里讨论:

#!/bin/bash    

while read line    
do    
    echo-e "$ line \ n"    
done <file.txt
Run Code Online (Sandbox Code Playgroud)

#!/bin/bash    
exec 3<file.txt

while read line    
do    
    echo-e "$ line \ n"    
done
Run Code Online (Sandbox Code Playgroud)

所以第一个版本工作正常,但我不明白循环文件的工作机制.但我理解的第二个版本的机制.但在这里,我不明白为什么它挂起,不打印任何东西.

Jon*_*ler 9

第一个循环起作用是因为重定向done应用于整个循环之后,因此read从文件中读取,而不是从脚本的标准输入读取.

第二个版本挂起,因为read从文件描述符0读取,这是标准输入,并且您没有在那里键入任何内容.该exec行重定向文件描述符3以便从文件中读取,但您不是从文件描述符3中读取.

你可以使用以下方法来拯救第二个

exec <file.txt
Run Code Online (Sandbox Code Playgroud)

现在从命名文件中读取标准输入.