bash는 왜 010이 8이라고 생각합니까?


17

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)이라고 생각하게 할 수 있습니까?


15
선행 0은 8 진수라고 말합니다. 방금 수행 x=10하면 echo $((x+0))을 표시 10합니다. 또한에 추가 기능 $이 필요하지 않습니다 ().
Terrance

2
많은 숫자 파서에서 0108을 의미하기 때문에 8을 의미하기 때문에 일부 언어를 0넣는 0x것은 16 진수를 의미합니다.
Derek 朕 會 功夫

9
이것은 프로그래밍 할 때 알아야 할 중요한 사실입니다. 대부분의 언어에서 08 진, 0x16 진 및 0b2 진을 트리거합니다 .
세스

공감 비 설명?
Tim

3
@tim 왜 8이 아닐까요? ;-) 아 내 downvote는 아니지만 아마도 너무 기본이기 때문입니다. 꽤 정상적인 행동입니다.
Rinzwind

답변:


42

a 0로 시작하는 숫자 시퀀스 는 8 진수로 해석됩니다.
진수 10= 진수 8.

bash가 10 진수로 처리하도록하려면 선행 0을 제거하거나 다음을 사용하여 10 진수를 강제하십시오.

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

일반적으로 모든베이스에 적용됩니다 10. 원하는베이스로 바꾸십시오 .

N=[base#]n

두 가지 방법으로 문제를 해결했습니다.
Pabi

1
@Tim $ {N %?}를 사용하여 마지막 숫자를
자른

@Tim이라면 어떻게 알아낼 수 없었습니다. $ {$ {N %?} :-0}은 zsh에서는 작동하지만 bash 또는 ksh에서는 작동하지 않습니다. (또한 :-위의 의견에서 :-0} 이어야합니다. }
Random832

당신은 당신이 어떤 기지 강제 할 수있는 당신의 대답에 포함해야한다 " 기본은 연산 기지를 대표하는 2 ~ 64 진수 번호는 형식 [기본 #] N을, n은 그 자료의 숫자입니다 " 출처 : bash는 심판
djeikyb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.