cat x | while read f1
do
count=0
cat $f1 | while read line
do
if ---;then
count=`expr $count +1`
fi
done
echo $count
done
发现count的值全部为0。于是在 if 语句下加了 echo $count ,count的值还是有增加的。可是为什么出了第二层循环就变为0了呢?
原因在于:管道触发两个子进程执行"|"两边的程序。
所以要在跳出第二层循环的时候count又回到了原来的进程。
shell的内建命令exec将并不启动新的shell,而是用要被执行命令替换当前的shell进程,并且将老进程的环境清理掉,而且exec命令后的其它命令将不再执行。
于是我们可以用exec替换掉
cat x | while read f1
do
count=0
exec 9 <$f1
while read -u 9 line
do
if ---;then
count=`expr $count +1`
fi
done
echo $count
done