bug-bash
[Top][All Lists]
Advanced

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

Weirdness in associative array assignements


From: dnade.ext
Subject: Weirdness in associative array assignements
Date: Wed, 15 Oct 2014 10:55:07 +0200

            Hello dear bash-bug mailing-list!

I am puzzled by bash behavior with array assignments.

It seems there is a behavior change introduced in bash 4.3 in array 
assignments. An array can actually reference itself in its own declaration.

$ declare -A foo=([bar]=1st) ; foo=([bar]=2nd [qwer]=${foo[bar]}) ; echo 
"address@hidden"
2nd 2nd
$ bash --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)


$ declare -A foo=([bar]=1st) ; foo=([bar]=2nd [qwer]=${foo[bar]}) ; echo 
"address@hidden"
2nd 1st
$ bash --version
GNU bash, version 4.2.25(1)-release (x86_64-pc-linux-gnu)

Is this a bug or a feature? I would have expected the bash <= 4.2 behavior to 
be right on the principle you cannot define *and* use regular variables at the 
same time. E.g.: "declare foo=bar gee=$foo" will not assign bar to gee. Plus, 
regular arrays behave "normally" in both bash 4.2 and 4.3:

$ declare -a foo=(1st) ; foo=(2nd ${foo[0]}) ; echo address@hidden
2nd 1st
$ bash --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

$ declare -a foo=(1st) ; foo=(2nd ${foo[0]}) ; echo address@hidden
2nd 1st
$ bash --version
GNU bash, version 4.2.25(1)-release (x86_64-pc-linux-gnu)



Another weirdness (I think) is this:
$ declare -A foo=([bar]=asdf [baz]=qwer) ; foo+=([bar]=asdf [baz]=qwer) ; echo 
"address@hidden" "address@hidden"
bar baz asdfasdf qwerqwer

Man page says :
When  +=  is applied to an array variable using compound assignment (see Arrays 
below), the variable's value is not unset (as it
is when using =), and new values are appended to the array beginning at one 
greater than the array's maximum index (for  indexed
arrays)  or  added  as  additional  key-value pairs in an associative array.

There's nothing about appending content to already-existing values. Honestly, I 
would expect the key/value to be replaced, but that could just be my mind being 
too twisted.

Regards,

            D

--
Damien Nadé <address@hidden>
Astek Sud-Est pour Orange/OF/DSIF/DFY/SFY/DO
Sophia Antipolis - France / Tel : 04 97 46 28 74


_________________________________________________________________________________________________________________________

Ce message et ses pieces jointes peuvent contenir des informations 
confidentielles ou privilegiees et ne doivent donc
pas etre diffuses, exploites ou copies sans autorisation. Si vous avez recu ce 
message par erreur, veuillez le signaler
a l'expediteur et le detruire ainsi que les pieces jointes. Les messages 
electroniques etant susceptibles d'alteration,
Orange decline toute responsabilite si ce message a ete altere, deforme ou 
falsifie. Merci.

This message and its attachments may contain confidential or privileged 
information that may be protected by law;
they should not be distributed, used or copied without authorisation.
If you have received this email in error, please notify the sender and delete 
this message and its attachments.
As emails may be altered, Orange is not liable for messages that have been 
modified, changed or falsified.
Thank you.



reply via email to

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