[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
>
>
Re: No expansions performed while declaring an associative array using a list of keys and values, felix, 2020/12/14
- Re: No expansions performed while declaring an associative array using a list of keys and values,
Oğuz <=