On Fri, Jun 19, 2009 at 11:05:27AM -0700, bitozoid wrote: > > edua...@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