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: Greg Wooledge
Subject: Re: printf has weird behaviour when parsing zero padded numbers
Date: Mon, 22 Jun 2009 08:18:49 -0400
User-agent: Mutt/1.4.2.2i

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)}

 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




reply via email to

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