|
From: | Arkanon |
Subject: | Re: [shell-script] bash: 08: valor muito grande para esta base de numeração (error token is "08") |
Date: | Tue, 11 Aug 2015 11:01:48 -0300 |
$ a=11Em 11 de agosto de 2015 10:50, Alfredo Casanova address@hidden [shell-script] <address@hidden> escreveu:
$ b=209
$ echo $((a+b))
220
$ a=$(printf %04d 11) # 0011
$ b=$(printf %06d 209) # 000209
$ echo $((a+b))
bash: 000209: valor muito grande para esta base de numeração (token com erro é "000209")
$ echo $((10#$a+10#$b))
220
Tem outra opção pra remover os zeros a esquerda:$ echo $var0008$ shopt -s extglob #ativa o extended globbing$ echo ${var##+(0)}8$ shopt -u extglobOn Tue, Aug 11, 2015 at 4:26 AM Tiago Peczenyj address@hidden [shell-script] <address@hidden> wrote:Ja mencionaram o Octal.
O q nao parece obvio é que este problema aparece em muitos lugares. A convenção de usar 0 na frente de octal e 0x na frente de hexa foi popularizada pelo C (tem 0b pra binario em alguns casos) e ainda hoje tem os seus usos (chmod é um caso).Entretanto os problemas com 08 e 09 geralmente surgem quando vc le uma entrada de dados e não valida corretamente -ou tem uma mascara. Como pedir uma data e tentar interpretar como numero. O melhor nesses casos é adicionar isso aos seus testes.Se o seu programa nao pode falhar, seja paranoico nas validaçoes e conversoes. Como forçar a base 10 nos numeros lidos.
[Prev in Thread] | Current Thread | [Next in Thread] |