Bashはなぜ016 + 1 = 15だと思いますか?

Bashはなぜ016 + 1 = 15だと思いますか?

0で始まる数字がなぜこのような興味深い動作を生成するのかを説明できる人はいますか?

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

以下を印刷します。

016+1=15

答え1

誤解は、この数字があなたの期待を表していないということです。

先行0は8進数を表します。016つまりと同じです8#16。先行ゼロを維持するにはが必要です10#016

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

答え2

なぜなら:

~$ echo $((NUM))
14

数字がゼロで始まる場合、8進値と見なされ、8進数16は10進数14と等しくなります。

関連情報