美文网首页
管道引起的一个错误

管道引起的一个错误

作者: 0X7C00 | 来源:发表于2018-07-18 21:09 被阅读0次

    请看下面的程序,下面的程序的主要功能为统计文件的行数,

    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))
    

    相关文章

      网友评论

          本文标题:管道引起的一个错误

          本文链接:https://www.haomeiwen.com/subject/rupapftx.html