当前位置: 首页 > 科技观察

linuxshell是逐行处理文本求和的,我傻了,,

时间:2023-03-12 11:32:19 科技观察

假设你要计算文本test.data第二列数字的和:112223334456当然你可以这样处理:awk'{s+=$2}END{prints}'test.data很快就得到了结果。不过,本文要说的要点与awk无关。我们用另一种方式计算,即逐行分析处理的方式。尝试1先试试第一种方法,shell实现如下:#!/usr/bin/envbashsum=0cattest.data|whilereadlinedotemp_num=$(echo"$line"|cut-d''-f2)sum=$(($sum+$temp_num))doneecho"wegetsum:$sum"输出结果:wegetsum:0这是为什么!为什么结果是0?这个问题是由脚本引起的。众所周知,这是一个管道命令,也就是说while循环的执行结果都在一个子shell中。一旦subsell退出,其中的结果也将一无所有。其实这个问题用本文提到的工具很容易发现:$shellcheckmyscriptLine3:cattest.data|whilereadline^--SC2002:Uselesscat.Consider'cmd