Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > gnu.bash.bug > #16620

Re: No word splitting for assignment-like expressions in compound assignment

From Lawrence Velázquez <vq@larryv.me>
Newsgroups gnu.bash.bug
Subject Re: No word splitting for assignment-like expressions in compound assignment
Date 2020-07-27 03:06 -0400
Message-ID <mailman.129.1595833589.2739.bug-bash@gnu.org> (permalink)
References <87o8o1zfpn.fsf@hobgoblin.ariadne.com> <F420E583-E5D4-48BB-98E3-044C700BA07A@larryv.me>

Show all headers | View raw


> On Jul 27, 2020, at 1:31 AM, Dale R. Worley <worley@alum.mit.edu> wrote:
> 
> 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.


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

Back to gnu.bash.bug | Previous | Next | Find similar


Thread

Re: No word splitting for assignment-like expressions in compound assignment Lawrence Velázquez <vq@larryv.me> - 2020-07-27 03:06 -0400

csiph-web