Bash总和而循环不总是给出相同的输出

时间:2018-07-20 15:30:28

标签: bash while-loop sum

我有一个txt文件,每行都有整数,我想求和。

SUM=0                             

while read line || [ -n "$line" ] ; do
    let "SUM += line"             

done                                  
echo $SUM                         

问题在于,虽然大多数时候我得到正确的结果,但有时我却得到SUM + 1。

这怎么解释?

输入文件:

2 
38
21
50
42
59
19
19
29
17
24
13
45
49
48
13
20
20
51
41
51
45
1 
17
6 
46
52
50
32
19
8 
28
35
33
13
4 
2 
49
32
19
17
17
16
51
23
32
26
54
31
54
14
17
55
53
18
34
4 
16
15

预期总和:1709,有时候我会得到1710。

1 个答案:

答案 0 :(得分:0)

因此,原因是在我的本地测试中,我使用SECONDS而不是SUM。我认为让这个问题更笼统是一个好主意。提示:永远不要像我刚才那样做,因为经验丰富的程序员会立即发现异常。 从bash手册:

  

秒   每次引用此参数时,返回自Shell调用以来的秒数。如果将值分配给SECONDS,则后续引用返回的值是分配以来的秒数加上分配的值。如果未设置SECONDS,则即使随后将其重置,它也会失去其特殊属性。

Benjamin W .:“不要使用大写的变量名”从未如此重要! ;)