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