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'
$ echo "${!varname[@]@Q}"
bash: ${VAR2[@][@]@Q}: bad substitution    # This is example from
direct usage of [@][@]
$

--
Arfrever Frehtes Taifersar Arahesis

Reply via email to