On Sunday, July 21, 2013 04:13:31 PM Chet Ramey wrote: > On 7/14/13 5:03 PM, Linda Walsh wrote: > > In order to declare an array of type int (or an integer array) > > I first tried: > > > >> declare -ai -g foo=(1 2 xx 3) > >> echo "${foo[@]}" > > 1 2 xx 3 <---------incorrect > > > > So then tried: > > > > > >> declare -ia -g foo=(1 2 xx 3) echo "${foo[@]}" > >> 1 2 0 3 <---------correct! > > > > It seems 'declare' is sensitive to the order of its options in an > > undesirable way -- i.e. for typed arrays, the -i should be > > allowed either before or after the -a (or -A for hashes). > > > > That makes me wonder if the "-g" worked. > > I.e. -- if "-g" after "-ia" works, and whether I need "-g -ia" > > (or "-gia") > > Thanks for the report. This will be fixed in bash-4.3. You can work > around it until bash-4.3 is released by splitting the attribute and > value assignments: > > declare -ai -g foo > foo=(1 2 xx 3) > > (For what it's worth, I don't see a difference in the output no matter what > the option order.) > > Chet
What's the bug? I can't reproduce this and always get "xx" no mater the option order. I always assumed the -i attribute doesn't get set until after assigning the values, which is why: $ ( declare -ia foo=(1 2 xx 3); echo "${foo[@]}" ) 1 2 xx 3 always gives you the xx, while forcing the evaluation to be done within declare's environment gives a different result (e.g. with quotes): $ ( declare -ia 'foo=(1 2 xx 3)'; echo "${foo[@]}" ) 1 2 0 3 I think this was already known and not a bug, and doesn't have to do with the order options are supplied in. -- Dan Douglas