什么是KSH或BASH中最好的简单优雅的求和方法?我的例子用了let命令,但我想找到更好的方法来汇总所有数字。
例如:
num1=1232
num2=24
num3=444
.
.
.
let SUM=$num1+num2+num3.........
如何尝试:
num1=1232
num2=24
num3=444
sum=$((num1+num2+num3))
echo $sum # prints 1700
同意ghostdog74的意见。我曾经使用$(( ))内置函数,但后来改用bc,因为我们接收的数据格式不是很“数字格式化”。请查看以下内容:
jyzuz@dev:/tmp> echo $(( 017 + 2 ))
17
jyzuz@dev:/tmp> echo $(( 17 + 2 ))
19
jyzuz@dev:/tmp>
看起来在第一种情况下,它将其理解为二进制或十六进制数字..不是很确定。
所以我改用了bc。您可以选择喜欢的方式:
bc << EOF
$num1 + $num2 + $num3
EOF
或者
bc <<< "$num1 + $num2 + $num3"
还有其他很酷的方法可以做到这一点……但如果您发送更多细节,比如是否执行除法,您需要添加bc -l
参数来加载数学库。
如果你将双括号移到最外面,就可以省略最后一个美元符号并自由地为操作数和运算符(包括变量和赋值运算符)添加空格,以提高可读性。
num1=1232
num2=24
num3=444
(( sum = num1 + num2 + num3 ))
(( count++ ))
(( sum += quantity ))
如果你不使用 let
或外部的 (())
形式(或者你正在递增变量或在右侧进行赋值),则不能使用增量样式运算符(*= /= %= += -= <<= >>= &= ^= |= ++ --
)。
你可以使用$(())
语法,但如果你有小数,使用awk或bc/dc进行数学计算,以实现“可移植性”。