2

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

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

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

$ val=$(( -1*-001 ))
$ echo $val
$ 1
$ val=$(( -1*-002 ))
$ echo $val
$ 2

结果在 -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")

另一个奇怪的行为是,当我乘以 -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............

为什么会发生这种情况?

4

2 回答 2

8

前导零表示八进制数。010和10不是同一个数字;第一个是八进制:010 八进制是十进制的 8。同样,“009”不是实数,因此您会看到错误:八进制中没有数字“9”。

您需要去除前导零。

于 2013-05-15T19:09:48.197 回答
6

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

$ val=$(( -1*-10#008 ))
$ echo $val
8
于 2013-05-15T19:57:50.140 回答