On Tue, Jul 10, 2018 at 1:44 PM, Ilkka Virta <itvi...@iki.fi> wrote: > I think the problematic case here is when the number comes as input from > some program, which might or might not print a leading sign or leading > zeroes, but when we know that the number is, in any case, decimal. > > E.g. 'date' prints leading zeroes, which is easy enough to handle: > > hour=$(date +%H) > > hour=${hour#0} # remove one leading zero, or > hour="10#$hour" # make it base-10 > > The latter works even with more than one leading zero, but neither works > with a sign. So, handling numbers like '-00159' gets a bit annoying: > > $ num='-00159' > $ num="${num:0:1}10#${num:1}"; echo $(( num + 1 )) > -158 > > And that's without checking that the sign was there in the first place. > > > Something like that will probably not be too common, but an easier way to > force any number to be interpreted in base-10 (regardless of leading > zeroes) could be useful. If there is a way, I'd be happy to hear.
It's not too complicated to separate the sign from the number eg: for num in 159 000159 +000159 -000159;do echo $((${num%%[!+-]*}10#${num#[-+]})) done