standards/52972: /bin/sh arithmetic not POSIX compliant

Dag-ErlingSmørgrav des at
Sun Jun 22 23:32:59 PDT 2003

Wartan Hachaturow <wart at> writes:
> The following reply was made to PR standards/52972; it has been noted by GNATS.
> On Sun, Jun 22, 2003 at 10:43:27PM +0200, Jens Schweikhardt wrote:
> > The recursive processing requires that $(($a+1)) needs to undergo
> > parameter expansion within $(()).
>  Right, but this construction works in /bin/sh:
>  wart at mojo:~$ /bin/sh
>  $ a=1
>  $ echo $(($a+1))
>  2

Yes.  It expands to $((1+1)) which evaluates to 2.

>  You've said the problem was with the variable without leading $, like
>  this:
>  $ a=1
>  $ echo $((a+1)) 
>  arith: syntax error: "a+1"

This *should* work, but doesn't.

>  And, as far as my English allows me to judge, the quoted part of SUS
>  says that "a" in this construct should be left in output as is (since it
>  doesn't have leading $, ${, $(, etc.), shouldn't it?

Yes, it should be left as-is so the part of the code that evaluates
arithmetic expressions knows what variable is involved.  For instance,
"$(($a+=1)) would expand to "$((1+=1))" before evaluation, which makes
no sense, while "$((a+=1))" clearly says to increase a with 1.

Dag-Erling Smørgrav - des at

More information about the freebsd-standards mailing list