There seems to be a bug that if an array variable with a name matching one of the special single-character variables exists, then that variable is used during substring expansion and parameter transformation.
There is also a potential issue with namerefs, in that they allow creating/modifying variables with invalid identifiers if a variable is defined first and subsequently given the nameref attribute, which is how the above behavior can be uncovered. # Expected behavior:set -- 1 2 3echo ${@@A} # set -- '1' '2' '3'echo ${@:0} # bash 1 2 3 ref=@declare -n ref # maybe should not be allowed? ref=(X) # These no longer reference the positional parameters:echo ${@@A} # declare -a @='X'echo ${@:0} # X