bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: No expansions performed while declaring an associative array using a


From: Oğuz
Subject: Re: No expansions performed while declaring an associative array using a list of keys and values
Date: Mon, 14 Dec 2020 12:45:30 +0300

On Mon, Dec 14, 2020 at 11:00 AM felix <felix@f-hauri.ch> wrote:

> On Fri, Dec 11, 2020 at 03:08:04PM +0300, Oğuz wrote:
> > I was trying the new features of bash 5.1 and came across this
> inconsistent
> > behavior:
> >
> >     $ foo='1 2'
> >     $ declare -A bar=($foo 3)
> >     $ declare -p bar
> >     declare -A bar=(["\$foo"]="3" )
> >     $
> >     $ bar+=($foo 3)
> >     $ declare -p bar
> >     declare -A bar=(["\$foo"]="3" ["1 2"]="3" )
> >
> > Is there a particular reason to avoid performing expansions in `declare
> -A
> > bar=($foo 3)'?
>
> When declaring ``associative array'', I alway use ``quoted'' syntax:
>
>     $ foo='1 2'
>     $ declare -A bar='($foo 3)'
>     $ declare -p bar
>     declare -A bar=(["1 2"]="3" )
>
> Not sure how to explain this, but I'm not surprised seeing this working so.
>
>     $ bar+=($foo 3)
>     $ declare -p bar
>     declare -A bar=(["1 2"]="3" )
>
>
With that it got even more confusing, see:

    $ foo='1 2'
    $
    $ declare -A X=($foo 3)
    $ declare -p X
    declare -A X=(["\$foo"]="3" )
    $
    $ X+=($foo 3)
    $ declare -p X
    declare -A X=(["1 2"]="3" ["\$foo"]="3" )
    $
    $ declare -A Y='($foo 3)'
    $ declare -p Y
    declare -A Y=(["1 2"]="3" )
    $
    $ Y+='($foo 3)'
    $ declare -p Y
    declare -A Y=([0]="(\$foo 3)" ["1 2"]="3" )

Where did the 0 come from?


> Seem ok for me!
>
>
I think it would be the best if the only difference between declaring a
variable using assignment builtins and bare assignment statements were that
those builtins had the ability to set variable attributes.


> --
>  Félix Hauri  -  <felix@f-hauri.ch>  -  http://www.f-hauri.ch
>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]