O líder 0diz que é octal. Se você apenas faz x=10, echo $((x+0))então mostra 10. Além disso, não há necessidade de extra $com o ().
Terrance
2
Em muitos analisadores de números, 010significa 8 porque colocar um 0na frente significa octal, semelhante a como colocar 0xem alguns idiomas significa hex.
Derek #
9
Isso é realmente uma coisa importante a saber ao programar. Na maioria dos idiomas, 0aciona octal, 0xhex e 0bbinário.
Seth
Explicações de voto negativo?
Tim
3
@tim por que não seria 8? ;-) Oh, não meu voto negativo, mas provavelmente porque é muito básico. É um comportamento bastante normal.
Rinzwind
Respostas:
42
As seqüências numéricas iniciadas com a 0são interpretadas como números octais.
Octal 10= decimal 8.
Para que o bash o trate como um número decimal, remova o zero inicial ou force o decimal com:
N=010
N=$((10#$N))
Geralmente isso funciona para todas as bases, basta substituir o 10pela base que você deseja:
Editou a pergunta com duas maneiras de resolvê-la.
Pabi
1
@ Tim para fazer isso você pode usar $ cortar o último dígito e, em seguida, $ {N: -} {N%?} Para substituir branco com 0.
Random832
@ Tim, se não, eu não conseguia descobrir como. $ {$ {N%?}: - 0} funciona no zsh, mas não no bash ou no ksh. (Além disso, :-no meu comentário acima deveria ter sido :-0})
Random832
Você deve incluir em sua resposta que pode forçar qualquer base com o " formulário [base #] n, onde base é um número decimal entre 2 e 64 representando a base aritmética e n é um número nessa base " source: bash ref
0
diz que é octal. Se você apenas fazx=10
,echo $((x+0))
então mostra10
. Além disso, não há necessidade de extra$
com o()
.010
significa 8 porque colocar um0
na frente significa octal, semelhante a como colocar0x
em alguns idiomas significa hex.0
aciona octal,0x
hex e0b
binário.Respostas:
As seqüências numéricas iniciadas com a
0
são interpretadas como números octais.Octal
10
= decimal8
.Para que o bash o trate como um número decimal, remova o zero inicial ou force o decimal com:
Geralmente isso funciona para todas as bases, basta substituir o
10
pela base que você deseja:fonte
:-
no meu comentário acima deveria ter sido:-0
})