bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Inconsistent arithmetic evaluation of parameters


From: Dennis Williamson
Subject: Re: Inconsistent arithmetic evaluation of parameters
Date: Tue, 1 Sep 2015 15:13:57 -0500



On Tue, Sep 1, 2015 at 12:50 PM, Greg Wooledge <wooledg@eeg.ccf.org> wrote:
On Tue, Sep 01, 2015 at 12:50:23AM -0400, Clint Hepner wrote:
> Repeat-By:
>
>     foo=bar
>     bar=5
>     echo $(( foo ))    # produces 5
>     echo $(( foo++ ))  # produces 5
>     echo $foo          # produces 6, not bar
>     echo $bar          # produces 5, not 6

bar was never changed from its value of 5, so I would say the final
result is correct.

The $(( foo++ )) part is questionable.  You've asked bash to increment
a variable (in a math context), but that variable doesn't have an
integer value.  But it "points to" (contains the name of) a variable
that does.

I would say that any of the following would make sense:

 1) An error message is printed.

 2) foo is unchanged (still contains "bar"), and bar is incremented.

 3) foo takes on the value of bar, and is then incremented.

Bash happens to do #3.

If you think of $(( foo++ )) as being basically equivalent to
$(( tmp=foo, foo=foo+1, tmp )) then #3 is actually quite sensible.


For comparison, ksh 93u+ and zsh 5.0.2 do the same as Bash.

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. Also post increment produces an error and pre increment produces no error and no action:

$ echo $(($foo++))
dash: 9: arithmetic _expression_: expecting primary: "bar++"
$ echo $(($bar++))
dash: 10: arithmetic _expression_: expecting primary: "5++"
$ echo $((++$foo))
5
$ echo $foo
bar
$ echo $bar
5
$ echo $((++$bar))
5
$ echo $bar
5



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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]