Perché bash pensa che 010 sia 8?

17

Perché bash pensa che il numero 010 = 8?

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

Ho pensato che potesse essere binario, ma 010 = 10 = 2. Allora perché ottiene 8 e come posso pensare che sia 010 = 10 (e 010 - 2 = 8)?

    
posta Tim 09.05.2015 - 15:17

1 risposta

42

Le sequenze numeriche che iniziano con 0 sono interpretate come numeri ottali.
Ottale 10 = decimale 8 .

Per ottenere bash per trattarlo come un numero decimale, rimuovere lo zero iniziale o forzare il decimale con:

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

Generalmente funziona su tutte le basi, basta sostituire 10 con la base che desideri:

N=[base#]n
    
risposta data Pabi 09.05.2015 - 15:19

Leggi altre domande sui tag