【发布时间】:2018-07-20 15:30:27
【问题描述】:
我有一个 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。
【问题讨论】:
-
更好用:
awk '{sum+=$1} END{print sum}' file -
关于更好的方法来做你正在做的事情,看看this question。不过,您的问题不是重复的,因为您不是在问如何做,而是为什么您会看到您描述的
+1。 -
日志记录对找出问题有很大帮助。如果您运行
bash -x yourscript以在执行时打印每一行,并将来自工作实例的日志与损坏的实例进行比较,您就会得到答案。 (顺便说一句,let已过时;(( SUM += line ))是现代替代方案)。将: SUM="$sum" line="$line"放入循环中以使您的set -x日志包含当前值。 -
请参阅ideone.com/mQv4zg 了解在线解释器运行您的代码 1000 次,并在所有这些上得到相同的答案。如果您可以在那里分叉代码,从而返回不一致的结果,那么我们就会遇到可以重现的问题,从而开始回答。
-
@BragiPls 你必须准确地展示你是如何运行脚本来重现你的问题的。
标签: bash while-loop sum