shell中一个十分恼人的bug,有关数学运算报错

今天写脚本的时候遇到了一个十分恼人的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’再计算吧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容