Dan Douglas wrote:
Ah so `arr+=([a]=x [b]=y)` will no longer be the same as `arr+=([a]+=x [b]+=y)`? I never liked that for associative arrays because the only workaround was to do multiple arr[key]= assignments to update or add more than one element at a time. My thinking was that this is due to bash's unique auto-incrementing of indexed array keys. Since in ksh you're not allowed to specify an index for one element of a compound assignment without specifying it for all elements, bash has some additional things to consider. ~ $ bash-4.2 -c 'typeset -ia a=({0..5}); a+=([0]+=1 {2..4}); typeset -p a' declare -ai a='([0]="1" [1]="3" [2]="5" [3]="7" [4]="4" [5]="5")' Bash 4.4: ~ $ ./doc/programs/bash-build/bash -c 'typeset -ia a=({0..5}); a+=([0]+=1 {2..4}); typeset -p a' declare -ai a=([0]="1" [1]="2" [2]="3" [3]="4" [4]="4" [5]="5") I almost think it makes sense to treat ordered and unordered collections differently.
Why?
With an unordered collection an outer += should obviously mean "add or update for each assignment".
For an array, you mean? like array a=( 1 2 3) array a+=( 4 5 6) then you get array a=(5 7 9). Or are you saying for an ordered array you'd have to use indexes, like array a=(1 2 3) array a+=([0]=4 [1]=7 [2]=10), then that would do your -- but wouldn't that be doing a vector operation of sorts? ^^ You can make similar "logic" jumps in going the same way in arrays as you can hashes. ... To me, if you want to add elements to an array or hash and use '=' on the interior, that should assign, like scalars do. Use '+=' on the interior to get an increment of the scalar. Why would you assign special non-uniform rules for scalars in an array vs. ones not in an array?