Dan Douglas wrote:
> On Sunday, July 21, 2013 04:13:31 PM Chet Ramey wrote:
>> (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.
----
        Yeah... you're both right.

it happened if you execute the statement a 2nd time, the 1st time
set's up the 2nd time for success:

function xx {
  typeset -gia foo=(1 2 NaN 3)
  echo "foo=\"${foo[@]}\""
}
---
Executed the first time:
> xx
foo="1 2 NaN 3"
2nd time...(same func)

> xx
foo="1 2 0 3"


> I always assumed the -i attribute doesn't get set until after assigning the 
> values, which is why:
---
I don't think so.   Not from the above.

The first sets up an array outside the function composed of integers,
so the 2nd time I execute  the same, it gets put through the "integer strainer".

The bug is that the "-i" isn't applied until after the array assignment
is done.. which isn't the case for scalars:

> declare -i v=xx
> echo $v
0

i.e. -i delays it's property effect until after the array has been assigned
which is why it works when you run it a 2nd time, but with scalars,
it works the 1st time.  Same thing happens with the "upper/lower case" 
attributes:

> declare -la low=(aa BBB cCC Ddd) 
> echo ${low[@]}
aa BBB cCC Ddd
> declare -la low=(aa BBB cCC Ddd)
> echo ${low[@]}                  
aa bbb ccc ddd

(no function needed).



Reply via email to