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