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

管道引起的一个错误

作者: 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))

相关文章

  • 管道引起的一个错误

    请看下面的程序,下面的程序的主要功能为统计文件的行数, 预期的输出应该是6,然而打印的结果却是3,过程中添加一些打...

  • bash shell 重定向

    标准输出重定向 标准错误重定向 标准输出和错误重定向到同一个文件 cat 管道线 Notice: 在管道线中传输的...

  • linux 中的奇妙错误(持续更新)

    linux 中的奇妙错误 1/无名管道 当打开一个管道之后,将管道的读端关闭,然后在向其中写入内容,进程会被信号S...

  • 管道与模块

    管道 管道可以将输入数据转为所需的输出数据,此外还可以处理验证,数据错误时可能抛出异常; 创建管道nest g p...

  • 热力管道补偿器的补偿量计算方式

    热力管道投入运行后,由于管内热媒的加热作用,会引起管道受热膨胀伸长。管道的热膨胀量可按下式计算: △L=αL(t2...

  • MAC下VMWare Fusion安装错误解决

    错误:安装完进行虚拟机安装的时,报内部错误; 错误:打不开 /dev/vmmon: 断裂管道; MAC的系统偏好设...

  • C语言标准流与管道

    stdin:输入流stdout:输出流strerr:错误流 管道:传输数据流

  • Golang延时操作

    如果只是单纯延时的话 如果涉及管道的话 如有错误,望指点!

  • java.lang.UnsatisfiedLinkError :

    此问题引起原因,基本上是由于添加so文件引起的错误。 错误原因1:相关信息 hyphenatechatsdk提供的...

  • 一个分号引起的语法错误

    写一段测试脚本,原本没想到有问题,为了谨慎起见还是在console里面跑来一下,然后报了错误: 没想到是什么原因,...

网友评论

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

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