使用管道符循环
文件如下: test
1
2
3
4
5
使用管道符计算文件行数脚本如下:
#!/bin/sh
linenum=0
cat test | while read line
do
echo "line content: $line"
((linenum+=1))
done
echo "line number: $linenum"
结果(最后echo的外部linenum无法接收到while内部改变的值):
line content: 1
line content: 2
line content: 3
line content: 4
line content: 5
line number: 0
使用重定向循环
使用重定向计算文件函数脚本如下:
#!/bin/sh
linenum=0
while read line
do
echo "line content: $line"
((linenum+=1))
done < test
echo "line number: $linenum"
输出结果为:
line content: 1
line content: 2
line content: 3
line content: 4
line content: 5
line number: 5
总结
使用管道符时,会fork出一个子进程,变量在父子进程里无法互通。使用第二种方式,在同一个进程中,所以达到了我们预期的目的。
使用管道符循环时读取速度会比重定向快很多倍,但是如果需要进行变量传递,就必须牺牲速度用重定向的方式了,大家有所取舍吧。
您的打赏是对我最大的鼓励!