请看下面的程序,下面的程序的主要功能为统计文件的行数,
count=0
for((i=0;i<2;i++))
{
cat file | while read line
do
count=$((count+1))
done
}
echo $count
cat file
123
456
789
预期的输出应该是6,然而打印的结果却是3,过程中添加一些打印信息,发现当外层循环i+1的时候,count的值就会变成0。
当程序改为下面的代码时可以得到预期的结果
count=0
for((i=0;i<2;i++))
{
while read line
do
count=$((count+1))
done <file
}
echo $count
对比这两个代码发现区别是代码一使用管道,使用管道意味着有父子进程,代码一中的count增加导致父子进程的count值并不一致,所以出现了上面所说的结果。
PS:
Linux Shell算术运算的方法有
let a=1+2
a=`expr 1 + 2 ` # 记得+号之间有空格
a=$[1+2]
a=$((1+2))
网友评论