为什么 bash 认为:016 + 1 = 15?

为什么 bash 认为:016 + 1 = 15?

有人可以向我解释为什么一个以 0 开头的数字会产生这种有趣的行为吗?

#!/bin/bash
NUM=016 
SUM=$((NUM + 1)) 
echo "$NUM + 1 = $SUM"

将打印:

016 + 1 = 15

答案1

误解是这些数字并不代表您的期望。

前导零表示以 8 为基数的数字。 Ie016与 相同8#16。如果你想保留前导零,那么你需要10#016.

> num=016
> echo $((num))
14
> echo $((10#$num))
16

答案2

因为:

~$ echo $((NUM))
14

如果数字以0开头,则认为是八进制值,八进制中的16等于十进制中的14。

相关内容