[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:
> > eduardo@ceo ~ $ 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