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)
所以第一个版本工作正常,但我不明白循环文件的工作机制.但我理解的第二个版本的机制.但在这里,我不明白为什么它挂起,不打印任何东西.
第一个循环起作用是因为重定向done应用于整个循环之后,因此read从文件中读取,而不是从脚本的标准输入读取.
第二个版本挂起,因为read从文件描述符0读取,这是标准输入,并且您没有在那里键入任何内容.该exec行重定向文件描述符3以便从文件中读取,但您不是从文件描述符3中读取.
你可以使用以下方法来拯救第二个
exec <file.txt
Run Code Online (Sandbox Code Playgroud)
现在从命名文件中读取标准输入.