> On Jul 27, 2020, at 1:31 AM, Dale R. Worley <[email protected]> wrote:
>
> Alexey Izbyshev <[email protected]> writes:
>> I have a question about the following behavior:
>>
>> $ Z='a b'
>> $ A=(X=$Z)
>> $ declare -p A
>> declare -a A=([0]="X=a b")
>> $ A=(X$Z)
>> $ declare -p A
>> declare -a A=([0]="Xa" [1]="b")
>>
>> I find it surprising that no word splitting is performed in the first
>> compound assignment.
>
>> * Brace expansion is performed for "A=(X=a{x,y}b)" by all bash versions
>> mentioned above (which is inconsistent with normal variable assignment).
>> * Globbing for "A=(X=a?b)" is performed by bash 3.1.17, but not by other
>> versions.
>
> Interesting. The documentation for 4.2.53(1) says this about parameter
> assignments generally, with no special rules for compound assignments:
>
> All
> values undergo tilde expansion, parameter and variable expansion, com-
> mand substitution, arithmetic expansion, and quote removal (see EXPAN-
> SION below). ... Word splitting is not
> performed, with the exception of "$@" as explained below under Special
> Parameters. Pathname expansion is not performed.
>
> So it seems like the word splitting in "A=(X$Z)" is incorrect. So is
> pathname expansion in that context.
If word splitting were not performed in compound assignments, this...
foo=(a b c)
...would not work. If pathname expansion were not performed in compound
assignments, this...
foo=(*)
...would not work. Arrays would become significantly less usable if
word splitting and pathname expansion were not allowed in compound
assignments.
vq