bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: printf has weird behaviour when parsing zero padded numbers


From: Chris F.A. Johnson
Subject: Re: printf has weird behaviour when parsing zero padded numbers
Date: Mon, 22 Jun 2009 18:51:54 -0400 (EDT)
User-agent: Alpine 2.00 (LMD 1167 2008-08-23)

On Mon, 22 Jun 2009, Greg Wooledge wrote:

> On Fri, Jun 19, 2009 at 11:05:27AM -0700, bitozoid wrote:
> > >         address@hidden ~ $ printf "%02d\n" 00008
> > >         -bash: printf: 00008: invalid number
> 
> > Sorry, not a bug, but octal representation. Really sorry.
> 
> Others will make the same mistake (it's very common), so for the
> benefit of people searching for answers, here are the two workarounds
> I know:
> 
> 1) Strip all leading zeroes from strings that you intend to use as numbers
>    before you use them.
> 
> 2) Force interpretation of the string as a base 10 number by prefixing it
>    with 10# inside a numeric context.
> 
> Number 1 is trickier than it seems at first glance.  There are two ways
> (that I know) to do it:
> 
>  a) Use extended glob notation to remove multiple leading zeroes in a
>     single regular expression:
> 
>     shopt -s extglob
>     n=${n##+(0)}

   Or, with standard globbing:

${n#"${n%%[!0]*}"}


>  b) Use a loop to remove all leading zeroes, one at a time:
> 
>     while [[ $n = 0* ]]; do n=${n#0}; done
> 
> Number 2 is usually simpler in practice:
> 
>     x=$((10#$n + 1))   # and so on


-- 
   Chris F.A. Johnson, webmaster         <http://woodbine-gerrard.com>
   ===================================================================
   Author:
   Shell Scripting Recipes: A Problem-Solution Approach (2005, Apress)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]