我有一个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。
答案 0 :(得分:0)
因此,原因是在我的本地测试中,我使用SECONDS而不是SUM。我认为让这个问题更笼统是一个好主意。提示:永远不要像我刚才那样做,因为经验丰富的程序员会立即发现异常。 从bash手册:
秒 每次引用此参数时,返回自Shell调用以来的秒数。如果将值分配给SECONDS,则后续引用返回的值是分配以来的秒数加上分配的值。如果未设置SECONDS,则即使随后将其重置,它也会失去其特殊属性。
Benjamin W .:“不要使用大写的变量名”从未如此重要! ;)