Usually, an assignment preceding a command that would create a variable with an invalid name is rejected and treated like a command name:
$ 1=X : bash: 1=X: command not found But when the variable name looks (sort of) like an array subscript assignment, it is accepted and an oddly named variable is created: $ f() { declare -p ${!var*}; }; var[0]=X var[@]=Y f declare -x var[0]="X" declare -x var[@]="Y"