On 2/20/20 6:54 PM, Arfrever Frehtes Taifersar Arahesis wrote: > Chet Ramey <chet.ra...@case.edu> 2020-02-20 21:22 UTC: >> On 2/19/20 7:46 PM, Arfrever Frehtes Taifersar Arahesis wrote: >>> But I am not interested in any ${!varname[@]}, but instead in applying >>> @operator transformations. >> >> OK, let's see how these work. >> >> Given the following >> >> VAR2=(aaa bbb) >> varname=VAR2 >> >> What does >> >> echo ${!varname[@]@Q} >> >> output? >> >> You first have to expand `varname[@]' as an indirect reference. Since >> varname is a scalar variable, varname[@] expands to the same thing as >> varname, which is VAR2. Now you expand VAR2, which, since VAR2 is an >> array variable, is the same as VAR2[0]. That gives you "aaa", so the >> output is 'aaa'. > > Your explanation is convincing for varname=VAR2 but now I would expect > different results for varname=VAR2[@]. > > Current actual results: > $ VAR2=(aaa bbb) > $ varname="VAR2[@]" > $ echo "${VAR2@Q}" > 'aaa' > $ echo "${VAR2[@]@Q}" > 'aaa' 'bbb' > $ echo "${!varname@Q}" > > $ echo "${!varname[@]@Q}" > > $ > > Expected results for last 2 commands: > > $ echo "${!varname@Q}" > 'aaa' 'bbb'
This is correct output, and there's a bug here. > $ echo "${!varname[@]@Q}" > bash: ${VAR2[@][@]@Q}: bad substitution # This is example from > direct usage of [@][@] This is not; it should echo the same as the previous case, for the same reason as I stated above (expand varname[@]; it expands to the same thing as varname since varname is not an array variable; use the expansion to VAR2[@]). -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU c...@case.edu http://tiswww.cwru.edu/~chet/