今天写脚本的时候遇到了一个十分恼人的bug,似乎也不算bug,但是以后写脚本的时候一定要注意
在shell中使用双括号进行数学运算:
echo $((17-16))
1
我在计算ms相减的时候,为了保持统一,我将所有的数据都变成三位数,也是可以计算的:
echo $((017-016))
1
但是意外发生了
echo $((018-017))
-bash: 018: value too great for base (error token is "018")
想着18也算大???明明和我一样大
问了同事之后,猜测可能是shell提供的双括号运算功能将‘0’开头的字符串转换成立8进制,然后进行运算,例如:
shell确实是按照8进制计算的,所以还是不要偷懒,老老实实用
VAR=${VAR##0}
去掉开头的‘0’再计算吧