[TriLUG] BASH oddity
Rick DeNatale
rick.denatale at gmail.com
Tue Feb 21 18:47:42 EST 2006
On 2/21/06, G.Wolfe Woodbury <ggw at wolves.durham.nc.us> wrote:
> On Tue, Feb 21, 2006 at 06:02:10PM -0500, Paul G. Szabady wrote:
> > That's what I thought, but other non-octal combinations work.
> >
> > IE
> >
> > [paul at at paul]$ declare -i dirx=88 ; echo $dirx
> > 88
> > [paul at at paul]$
>
> The leading '0' digit trigger the octal interpretation. There are
> special cases in the code for 09 but 08 seems to have escaped someone's
> notice. The library spec says that 08 should be correctly interpreted.
>
> might be worth filing a bug with your distributions bug site.
Not sure which library spec you're talking about, but bash seems to be
working as designed if it rejects a constant of 08, and if its
accepting 09 then THAT's a bug.
Bash on my Ubuntu/debian system doesn't like either 08 or 09 as an
arithmethic literal. And I don't believe that it should. Here's the
relevant paragraph from man bash:
Constants with a leading 0 are interpreted as octal numbers. A
leading 0x or 0X denotes hexadecimal. Otherwise, numbers take the
form [base#]n, where base is a decimal number between 2 and 64
representin the arithmetic base, and n is a number in that base. If
base# is omitted, then base 10 is used. The digits greater than
9 are represented by the lowercase letters, the uppercase letters, @,
and _, in that order. If base is less than or equal to 36, lowercase
and uppercase letters may be used inter‐changeably to represent
numbers between 10 and 35.
So here's a way to get around the problem:
rick at bill:~$ declare -i dirx=10#$(date +%V)
rick at bill:~$ echo $dirx
8
declare -i dirx=10#$(date +%V)
More information about the TriLUG
mailing list