Chris Down wrote:
Yes, I agree, it becomes ambiguous when described in this fashion. I think the
aesthetics of x+=y vs x=x+y are important here.
From the bash manpage, it would see that += is higher precedence
than assignment, so the increment would be done first, followed
by the attempt at an assignment of 1 to 1.
(Which might be determined as 'true', = 1 in (()) expressions...
so -- only in looking at the manpage, I'd have to lean toward '1'.
(I had been leaning toward 2 since the ='s are evaled from the right, but
the += is done first according to this:
The operators and their precedence, associativity, and values are the
same as in the C language. The following list of operators is grouped
into levels of equal-precedence operators. The levels are listed in
order of decreasing precedence.
id++ id--
variable post-increment and post-decrement
++id --id
variable pre-increment and pre-decrement
- + unary minus and plus
! ~ logical and bitwise negation
** exponentiation
* / % multiplication, division, remainder
+ - addition, subtraction
<< >> left and right bitwise shifts
<= >= < >
comparison
== != equality and inequality
& bitwise AND
^ bitwise exclusive OR
| bitwise OR
&& logical AND
|| logical OR
expr?expr:expr
conditional operator
= *= /= %= += -= <<= >>= &= ^= |=
assignment
expr1 , expr2
comma