Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 负数与-1相乘时的奇怪行为_Linux_Bash - Fatal编程技术网

Linux 负数与-1相乘时的奇怪行为

Linux 负数与-1相乘时的奇怪行为,linux,bash,Linux,Bash,我在用bash编写脚本,我得到的是负数 -001,-002,-003 我必须把它们变成正数,所以我决定用-1乘以它们。 然后 结果在-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 (err

我在用bash编写脚本,我得到的是负数

-001,-002,-003

我必须把它们变成正数,所以我决定用-1乘以它们。 然后

结果在-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............

为什么会发生这种情况?

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

您需要去掉前导零。

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


谢谢,我得到了答案。什么是去除前导零的简单方法。你能帮忙吗?首先你应该避免输入前导零。如果你想知道如何脱掉它们。
$ 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............
$ val=$(( -1*-10#008 ))
$ echo $val
8