将负数乘以-1时的奇怪行为

Din*_*edi 2 linux bash

我正在使用bash编写脚本,我得到这样的负数

-001,-002,-003,.........................,-008,-009,-010,-011,-012. ....

我必须将它们改为正数,所以我决定将-1乘以它们.然后

$ val=$(( -1*-001 ))
$ echo $val
$ 1
$ val=$(( -1*-002 ))
$ echo $val
$ 2
Run Code Online (Sandbox Code Playgroud)

结果可以达到-007,但是当我乘以-008和-009时,会发生如下错误

$ val=$(( -1*-008 ))
bash: -1*-008: value too great for base (error token is "008")

$ val=$(( -1*-009 ))
bash: -1*-009: value too great for base (error token is "009")
Run Code Online (Sandbox Code Playgroud)

另一个奇怪的行为是,当我乘以-010,-011,-012等等...异常结果发生如下

$ val=$(( -1*-010 ))
$ echo $val
$ 8
$ val=$(( -1*-011 ))
$ echo $val
$ 9
$ val=$(( -1*-012 ))
$ echo $val
$ 10
$ val=$(( -1*-013 ))
$ echo $val
$ 11

and so on............
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

mea*_*gar 9

前导零表示八进制数.010和10的数字不一样; 第一个是八进制:010八进制是十进制的8.类似地,"009"不是实数,因此您看到的错误:八进制中没有数字 "9".

你需要剥离前导零.


sva*_*nte 5

您可以使用10#前缀强制十进制(而不是八进制)值:

$ val=$(( -1*-10#008 ))
$ echo $val
8
Run Code Online (Sandbox Code Playgroud)