最优的方案
#!/bin/sh
while read LINE
do
echo $LINE
done < $1
不过这种更加常用
#!/bin/sh
for LINE in $(cat $1)
do
echo $LINE
done
两者的差别在数据的吞吐量,至少教材是这样讲的。
如果想搞明白上面的话,至少要明白管道和重定向的差别。
不过“列出文件的每一行文本内容,再循环遍历上述列表结果”比“循环遍历指定文件”要多干一些事情
至于其他大部分文件扫描方法与上述两种方法类似,比如
#!/bin/sh
cat $1 | while read LINE
do
echo $LINE
done
或者
#!/bin/sh
while line LINE
do
echo $LINE
done
不过,事实上还有一种文件遍历方法
为Unix-like platform管理员熟悉,却很少被使用
比如/usr/bin/e.t.c.sh > /dev/null 2>&1
2>&1翻译过来就是将stderr的输出重定向到stdout
这就是所谓的文件描述符,你可以理解为C语言中的文件指针,事实上也大同小异
exec 3<&0
exec 0<$1
while read LINE
do
echo $LINE
done
exec 0<&3
这段代码说明了它没能普及的原因,不过文件描述符的意义是巨大的
毕竟Unix-like platform是用文件来描述组织一切的
wangyu 于 2008-08-27 12:08:53发表:
高见
lcw0428 于 2008-08-27 11:09:45发表:
不错,学习了。谢谢.