[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: No word splitting for assignment-like expressions in compound assign
From: |
Dale R. Worley |
Subject: |
Re: No word splitting for assignment-like expressions in compound assignment |
Date: |
Mon, 27 Jul 2020 01:31:32 -0400 |
Alexey Izbyshev <izbyshev@ispras.ru> 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. Oddly, brace expansion is not
mentioned.
Dale
Re: No word splitting for assignment-like expressions in compound assignment, Chet Ramey, 2020/07/28