管道 子进程

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
























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值