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. 선행 0을 유지하려면 가 필요합니다 10#016.

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

답변2

왜냐하면:

~$ echo $((NUM))
14

숫자가 0으로 시작하면 8진수 값으로 간주되며 8진수 16은 10진수 14와 같습니다.

관련 정보