管道 子進程

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
























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章