On Tue, Sep 1, 2015 at 3:23 PM, Greg Wooledge <wool...@eeg.ccf.org> wrote:

> On Tue, Sep 01, 2015 at 03:13:57PM -0500, Dennis Williamson wrote:
> > The version of dash I have handy (0.5.7) has math support which IMHO is
> > broken:
> >
> > $ foo=bar
> > $ bar=5
> > $ echo $foo
> > bar
> > $ echo $((foo))
> > dash: 4: Illegal number: bar
> > $ echo $(($foo))
> > 5
> > $ echo $((bar))
> > 5
> > $ echo $(($bar))
> > 5
> >
> > Note the inconsistency in support of omitting the inner dollar sign.
>
> $foo is expanded to bar, so the following two lines are always going to
> be equivalent:
>
> echo $(($foo))
> echo $((bar))
>

It's the line above those two where I demonstrate the failure in the
indirection and equivalency.

$ echo $((foo))  # expansion succeeds, indirection fails
dash: 4: Illegal number: bar
$ echo $(($foo))  # both expansion and indirection succeed
5
$ echo $((bar))  # expansion succeeds
5
$ echo $(($bar))  # expansion succeeds
5

Bash doesn't have this inconsistency. (Just don't omit the dollar sign from
$RANDOM in most Bourne-derived shells.
https://lists.gnu.org/archive/html/bug-bash/2010-01/msg00039.html)


> POSIX also specifies (vaguely!!) that $((x)) and $(($x)) are equivalent.
>



-- 
Visit serverfault.com to get your system administration questions answered.

Reply via email to