Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 Sep 2012 19:34:06 +0200
From:      Jilles Tjoelker <jilles@stack.nl>
To:        David Wolfskill <david@catwhisker.org>
Cc:        stable@freebsd.org
Subject:   Re: /bin/sh arithmetic doesn't seem to like leading 0 now
Message-ID:  <20120921173406.GC9070@stack.nl>
In-Reply-To: <20120921170902.GC28959@albert.catwhisker.org>
References:  <20120921170902.GC28959@albert.catwhisker.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Sep 21, 2012 at 10:09:02AM -0700, David Wolfskill wrote:
> I have a construct in a shell script that I had been using under
> stable/8 (most recently, @r240259), but which throws an error under
> stable/9 (at least as early as @r238602):

> $ echo $(( ( $( date +%m ) - 1 ) / 3 + 1 ))
> 3
> $ uname -r
> 8.3-PRERELEASE

> $ echo $(( ( $( date +%m ) - 1 ) / 3 + 1 ))
> arithmetic expression: expecting ')': " ( 09 - 1 ) / 3 + 1 "
> $ uname -r
> 9.1-PRERELEASE

> Trying bits & pieces of the above, I narrowed the issue down to:

> $ echo $(( 09 + 0 ))
> arithmetic expression: expecting EOF: " 09 + 0 "

> while

> $ echo $(( 9 + 0 ))
> 9
> $ 

> is not a problem.

> Is this intentional?

Yes, it was changed with r216547, December 2010.

This was done to avoid an inconsistency where constants starting with
"0" and containing "8" or "9" were decimal, so something like
$((018-017)) expanded to 3.

There are indeed various cases where this inconsistency does not matter
(because the numbers with leading zeroes do not exceed 10).

> (I can work around it -- e.g., by using sed to strip leading 0 from the
> month number (since strftime() doesn't appear to have a format that
> provides the value in a form that lacks the leading zero for values <
> 10).  But I'd rather not do that if I don't need to.)

You can use  date +%-m  although it is not in POSIX.

With POSIX only, it is still possible to do it reasonably efficiently,
for example $(( 1$(date +%m) - 100 )) or v=$(date +%m); v=${v#0}.

-- 
Jilles Tjoelker



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120921173406.GC9070>