为什么bash认为010是8?

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

x=010 echo $x 010 echo $(( x+0 )) 8 echo $(( x-2 )) 6 

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

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

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

 N=010 N=$((10#$N)) 

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

 N=[base#]n