|
From: | Cristiano Amaral |
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:51:37 -0300 |
Senhores, grato pelas explicações e sugestões, vou utilizar o bc, para simplificar e não complicar demais o script....
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.Em segunda-feira, 10 de agosto de 2015, Alfredo Casanova address@hidden [shell-script] <address@hidden> escreveu:Pode usar a conversão de bases do proprio shell:$ var=08$ echo $var08$ echo $((10#$var))
8On Mon, Aug 10, 2015 at 10:52 AM Paulo Bettega address@hidden [shell-script] <address@hidden> wrote:Valeu a explicação. O awk também faz a mesma coisa
awk 'BEGIN {print 010+90}'
98
On 10-08-2015 10:48, Arkanon address@hidden [shell-script] wrote:
> Em 10 de agosto de 2015 10:39, Paulo Bettega address@hidden> <mailto:address@hidden> [shell-script] <address@hidden
> <mailto:address@hidden>> escreveu:
>
> __
> Olá Arkanon, valeu os links. Sempre achei que esse problema só aparecesse
>
> somando 1+08 ou 1+09 por exemplo, e de 1+01 a 07 soma sem erro.
> Mas no link tem esse:
>
> echo $((10+090))
> bash: 10+090: valor muito grande para esta base de numeração (error token is "090")
>
> tirando o zero da frente dá certo
> echo $((10+90))
> 100
>
> mas e essa? 010 mais 90 dá quanto?
> echo $((010+90))
> 98
> será possível que o bash somou 010 binário com 90 decimal? rs
>
> Essa dúvida está indiretamente respondida no segundo link, que explora mais o uso de bases
> numéricas no bash :)
> O que aconteceu aí é que o bash somou 010 em octal (base indicada implicitamente pelo 0 inicial) com
> 90 em decimal (base default) e mostrou o resultado em decimal.
> Explicitamente, a operação acima seria escrita
> $ echo $((8#10+10#90))
> 98
>
> Uso mais o bc e agora awk e ksh como calculadoras, já que o bc não faz
> potência de expoente fracionário (achei uma dica no LQ pra fazer isso,
> mas com awk e ksh é mais direto).
>
> Responder através da web> <https://br.groups.yahoo.com/neo/groups/shell-script/conversations/messages/38810;_ylc=X3oDMTJxZnAwcXYxBF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BG1zZ0lkAzM4ODEwBHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTQzOTIxMzkyNQ--?act=reply&messageNum=38810>
> •
> <mailto:address@hidden?subject=Res%3A%20Re%3A%20%5Bshell-script%5D%20bash%3A%2008%3A%20valor%20muito%20grande%20para%20esta%20base%20de%20numera%C3%A7%C3%A3o%20%28error%20token%20is%20%2208%22%29>
>
> • através de email
> <mailto:address@hidden?subject=Res%3A%20Re%3A%20%5Bshell-script%5D%20bash%3A%2008%3A%20valor%20muito%20grande%20para%20esta%20base%20de%20numera%C3%A7%C3%A3o%20%28error%20token%20is%20%2208%22%29>
> • Adicionar um novo tópico
> <https://br.groups.yahoo.com/neo/groups/shell-script/conversations/newtopic;_ylc=X3oDMTJlYW8zMnN2BF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQzOTIxMzkyNQ-->
> • Mensagens neste tópico
> <https://br.groups.yahoo.com/neo/groups/shell-script/conversations/topics/38808;_ylc=X3oDMTM2amVkY3RxBF9TAzk3NDkwNDM3BGdycElkAzE5NDEzMTIEZ3Jwc3BJZAMyMTM3MTExMjU0BG1zZ0lkAzM4ODEwBHNlYwNmdHIEc2xrA3Z0cGMEc3RpbWUDMTQzOTIxMzkyNQR0cGNJZAMzODgwOA-->
> (3)
>
> .
> --
> (o_ @arkanon <http://twitter.com/arkanon> (Twitter) __o
> //\ address@hidden <mailto:address@hidden> _`\<,
> V_/_ www.lsd.org.br <http://www.lsd.org.br/> (_)/(_)
> ---------------------------------
>
>
> ----------------------------------------------------------
> Enviado por: Arkanon <address@hidden>
[Prev in Thread] Current Thread [Next in Thread]
- bash: 08: valor muito grande para esta base de numeração (error token is "08"), Cristiano Amaral, 2015/08/10
- Re: [shell-script] bash: 08: valor muito grande para esta base de numeração (error token is "08"), Arkanon, 2015/08/10
- Re: [shell-script] bash: 08: valor muito grande para esta base de numeração (error token is "08"), Paulo Bettega, 2015/08/10
- Re: [shell-script] bash: 08: valor muito grande para esta base de numeração (error token is "08"), Arkanon, 2015/08/10
- Re: [shell-script] bash: 08: valor muito grande para esta base de numeração (error token is "08"), Paulo Bettega, 2015/08/10
- Re: [shell-script] bash: 08: valor muito grande para esta base de numeração (error token is "08"), Alfredo Casanova, 2015/08/10
- Re: [shell-script] bash: 08: valor muito grande para esta base de numeração (error token is "08"), Tiago Peczenyj, 2015/08/11
- Re: [shell-script] bash: 08: valor muito grande para esta base de numeração (error token is "08"), Alfredo Casanova, 2015/08/11
- Re: [shell-script] bash: 08: valor muito grande para esta base de numeração (error token is "08"), Arkanon, 2015/08/11
- Re: [shell-script] bash: 08: valor muito grande para esta base de numeração (error token is "08"), Cristiano Amaral <=
- Prev by Date: Re: [shell-script] Preenchimento com espaços a esquerda
- Next by Date: Re: [shell-script] Barra de Progresso com YAD
- Previous by thread: Re: [shell-script] bash: 08: valor muito grande para esta base de numeração (error token is "08")
- Next by thread: Barra de Progresso com YAD
- Index(es):