David Korn schrieb:
cc: [EMAIL PROTECTED] Subject: Re: [ast-developers] Arrays in structured variables
--------

I'm having problems extracting an array component from a structured variable. Is that supposed to work anyway? Here is an example:

     el0=(typeset name="base"; typeset -a children)
     el1=(typeset text=one)
     el2=(typeset text=two)
     el0.children=($el1 $el2)
     print "child0 = ${el0.children[0]}"

The output looks somewhat strange:

     child0 = (

The output of 'print $el0', however, is correct:

( typeset -a children=( '(' text\=one ')' '(' text\=two ')' ) name=base )

and the example works if a structured variable is used in place of the array, so I think it's bug specific to array components.

I think that the problem is that the ( and ) are only recognized during
parsing, not during expansion.
That is why you need to do
        eval bar="$foo"
to copy compound variable foo into bar rather than just
        bar=$foo


Thus, the line
      el0.children=($el1 $el2)
does not do what you expect.  I suspect that you wanted to do
el0.children=( (typeset text=one) (typeset text=two) ) which you could do as eval el0.children=\( "$el0" "$el2" \)
If this is not what you intended, let me know.

Thanks for the clarification. Actually

    eval "el0.children=($el1 $el2)"

works as intended. Further experiments showed that

    el3=(typeset text=three)
    eval "el0.children+=($el3)"

does not work (parser stumbles on '(('), neither does

    eval "el0.children+=( $el3 )"

(result is empty, not quite sure why), but

    eval "el0.children+=(\"$el3\")"

finally did the trick.

Regards,
Bernd

--
Bernd Eggink
[EMAIL PROTECTED]
http://sudrala.de
_______________________________________________
ast-developers mailing list
[email protected]
https://mailman.research.att.com/mailman/listinfo/ast-developers

Reply via email to