我想在这里讨论两种逐行读取文件的方法:
#!/bin/bash
while read line
do
echo-e "$ line \ n"
done <file.txt
和
#!/bin/bash
exec 3<file.txt
while read line
do
echo-e "$ line \ n"
done
第一个版本能够正常工作,但我不理解它与文件一起使用的机制。而第二个版本的机制我理解了。但是在这里,我不理解为什么它会挂起并且没有打印任何东西。
read
行中的<&3
能正常工作吗?在真正的 Bourne shell 的早期,重定向会在每次循环时执行,因此会产生一些有趣的效果(例如文件在每次迭代时关闭)。我可以相信它已经被修改了,以便事情变得更加合理。FWIW:当我在 MacOS X 上尝试使用bash
,并使用以下命令:while read line < somefile; do echo $line; done
,我重复地获得了somefile
的第一行...但是使用<&3
符号,我确实获得了文件的后续行。要小心! - Jonathan Lefflerawk
和sed
。但是我会开始阅读一些关于bash基础的书籍。 :) - jaypal singhdone
语句后添加了<&3
,而不是read
语句。 - jaypal singh