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

标签 linux bash

我正在使用 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............

为什么会这样?

最佳答案

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

您需要去除前导零。

关于linux - 将负数乘以 -1 时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16573086/

相关文章:

regex - Bash - 如何将每一行放在引号内

linux - 具有多个命令的 Sublime Text 构建系统

ruby-on-rails - 在 CentOS 7 上安装 Jekyll 错误

bash - 为什么 bash -c "false; echo $?"打印 0?

bash - cat 命令中的奇怪语法

linux - 如何检查 Bash 中的两条路径是否相等?

mysql - bash 从 bash 命令更新 mysql

python - 在pycharm中使用linux控制台

linux - register_kprobe 为涉及 rip 的指令返回 EINVAL (-22) 错误

linux - Qt中的cmake找不到第三方库,而命令行中的cmake可以