oak*_*igh 1 bash loops sh io-redirection
下面两段代码在读取文件内容时有什么区别?
while read i; do
echo $i
done < ${filename}
Run Code Online (Sandbox Code Playgroud)
while read i < ${filename}; do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
command <filenameopens filename,command使用连接到刚刚打开的文件句柄的标准输入运行,然后关闭文件句柄。
因此,当您这样做时while condition; do ... done <filename,整个循环是command:它在循环之前打开文件一次,并且在循环完成之前不会关闭它。这意味着read循环中的所有语句都会连续应用于同一个打开的文件,因此它会读取文件的所有行。
但当你这样做时while read < filename; do ... done,就command只是这样了read。所以它每次都会打开文件,运行read,然后关闭文件......。您最终只是一遍又一遍地阅读文件的第一行。