On 10/10/2017 07:00 AM, shawn wilson wrote: > I guess that's the right way to describe what I'm seeing: > > [swilson@localhost ~]$ unset f; f=(aaa bbb ccc) declare -p f > declare -x f="(aaa bbb ccc)" > [swilson@localhost ~]$ unset f; f=("aaa" "bbb" "ccc") declare -p f > declare -x f="(aaa bbb ccc)" > [swilson@localhost ~]$ unset f; f=(aaa bbb ccc) > [swilson@localhost ~]$ declare -p f > declare -a f='([0]="aaa" [1]="bbb" [2]="ccc")' > > Is this known? What exactly is going on / what does this mean? >
Bash parses the array assignment as though it were valid while reading words, assignments, and redirects of the command. After processing expansions, the saved assignment text is re-interpreted as a string assignment, presumably because at this point bash no longer cares about the quoting of metacharacters so they're just treated as literal. Array assignments aren't valid preceding commands of course because the environment fundamentally stores strings / key-value pairs of binary blobs. This should probably be an error, but this is what bash has always done, and this hasn't really caused any problems other than occasionally tricking people into thinking arrays are somehow exportable.
signature.asc
Description: OpenPGP digital signature