La guía 0le dice que sea octal. Si solo lo haces, x=10entonces echo $((x+0))se muestra 10. Además, no es necesario el extra $con ().
Terrance
2
En muchos analizadores numéricos, 010significa 8 porque al poner un 0frente significa octal, similar a cómo poner 0xen algunos idiomas significa hexadecimal.
Derek 朕 會 功夫
9
Esto es realmente algo importante para saber cuando se programa. En la mayoría de los idiomas se 0activan octal, 0xhexadecimal y 0bbinario.
Septiembre
¿Explicaciones de voto negativo?
Tim
3
@tim ¿por qué no sería 8? ;-) Sin embargo, no es mi voto negativo, pero probablemente porque es demasiado básico. Es un comportamiento bastante normal.
Rinzwind
Respuestas:
42
Las secuencias numéricas que comienzan con a 0se interpretan como números octales.
Octal 10= decimal 8.
Para que bash lo trate como un número decimal, elimine el cero inicial o fuerce el decimal con:
N=010
N=$((10#$N))
En general, eso funciona para todas las bases, simplemente reemplace la 10con la base que desee:
@Tim para hacerlo, puede usar $ {N%?} Para cortar el último dígito y luego $ {N: -} para reemplazar el espacio en blanco con 0.
Random832
@Tim si es así, no podría entender cómo. $ {$ {N%?}: - 0} funciona en zsh pero no en bash o ksh. (Además, :-en mi comentario anterior debería haber sido :-0}
Random832
Debe incluir en su respuesta que puede forzar cualquier base con la " forma [base #] n, donde base es un número decimal entre 2 y 64 que representa la base aritmética, yn es un número en esa base " fuente: ref bash
0
le dice que sea octal. Si solo lo haces,x=10
entoncesecho $((x+0))
se muestra10
. Además, no es necesario el extra$
con()
.010
significa 8 porque al poner un0
frente significa octal, similar a cómo poner0x
en algunos idiomas significa hexadecimal.0
activan octal,0x
hexadecimal y0b
binario.Respuestas:
Las secuencias numéricas que comienzan con a
0
se interpretan como números octales.Octal
10
= decimal8
.Para que bash lo trate como un número decimal, elimine el cero inicial o fuerce el decimal con:
En general, eso funciona para todas las bases, simplemente reemplace la
10
con la base que desee:fuente
:-
en mi comentario anterior debería haber sido:-0
}