为什么 bash 认为 010 是 8?

Tim*_*Tim 17 bash

为什么 bash 认为数字 010 = 8?

x=010
echo $x
  010
echo $(( x+0 ))
  8
echo $(( x-2 ))
  6
Run Code Online (Sandbox Code Playgroud)

我认为它可能是二进制的,但 010 = 10 = 2。那么为什么它会得到 8,我如何让它认为 010 = 10(和 010 - 2 = 8)?

Pab*_*abi 42

以 a 开头的数列0被解释为八进制数。
八进制10= 十进制8

要让 bash 将其视为十进制数,请删除前导零或强制使用十进制数:

N=010
N=$((10#$N))
Run Code Online (Sandbox Code Playgroud)

通常适用于所有基础,只需将 替换为10您想要的基础:

N=[base#]n
Run Code Online (Sandbox Code Playgroud)