On Mon, Dec 14, 2020 at 11:00 AM felix <fe...@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 - <fe...@f-hauri.ch> - http://www.f-hauri.ch > >