On 2/20/15 2:42 PM, SN wrote: > Thanks to you both for the answers. I am glad to see that my original > issue has been fixed. > The thread is indeed long and detailed, so let me just leave a note > about a weird behaviour with 4.4.0 (devel) I have that may or may not be > the intended behaviour. > > bash-4.4$ e='(`uname >&2`)'; declare -a a=$e; echo "[$a]" > Linux > [] > bash-4.4$ e='(`uname >&2`)'; declare -a a=$e; echo "[$a]" > [(`uname >&2`)] > > As you can see, only in the second case uname is not run. (One can also > type "unset a" to have it execute again.) So there seems to be another > inconsistency.
It's intentional. Read http://lists.gnu.org/archive/html/bug-bash/2014-12/msg00115.html for some context, especially this part: So, the main difference with the current behaviour would be that declare a='(1 2 3)' or: declare 'a=(1 2 3)' or declare a='([0]=a [1]=b)' would not be an array (or hash) assignment if a was previously declared as a hash or array. declare -a a='(1 2)' would still be but be deprecated in favour of: declare -a a=(1 2) or declare a=(1 2) I have played around a little with this section of code, and it will probably change some more before bash-4.4 is released. > By the way, I use `cmd` instead of $() because I have this: > $ : $(echo x) > bash: command substitution: line 8: syntax error near unexpected token `)' > bash: command substitution: line 8: `echo x)' You probably built bash using byacc, which has major problems with recursive calls to yyparse(). `configure' should have displayed a warning when you ran it. Chet -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRU c...@case.edu http://cnswww.cns.cwru.edu/~chet/