On Thu, Jan 24, 2013 at 2:34 PM, Roland Mainz <[email protected]>wrote:
> On Thu, Jan 24, 2013 at 10:05 PM, David Korn <[email protected]> wrote: > > cc: [email protected] > > Subject: Re: [ast-users] nameref confusion--not expanding as expected? > > -------- > > > > This is caused by a for loop optimizer bug. It treated $v as a loop > > invariant. I am looking for a solution. > > I'm not sure whether it's a bug at all... the issue is that he uses > "nameref v" to declare a nameref but doesn't give the nameref a > variable name as input. Technically the first assignment of a value to > a nameref defines the name of the variable it will access while > following accesses set the value of the alias'ed variable. > Not sure if I fully understand you here but according to ksh manual: "If a nameref is used as the index of a for loop, a name reference is established for each item in the list." > > Changing Aaron's example to this version fixes the problems: > -- snip -- > set -e > set -u > > print ${.sh.version} > > function dumpParams # array > { > set -eu > nameref a=$1 > shift > nameref v > print '--- works' > for v in "${a[@]}" > do > print "${!v}=$v" > done > print '---' > } > > function dumpParams2 # array > { > set -eu > nameref a=$1 > shift > > print '--- doesn'\''t work' > for vn in "${a[@]}" > do > nameref v=$vn > print "${!v}" = "$v" > done > print '---' > } > > foo=1 > bar=2 > baz=3 > array=(foo bar baz) > > dumpParams array > print > dumpParams2 array > -- snip -- > > Unified diff looks like this: > -- snip -- > --- aaron_nameref_original.sh 2013-01-24 22:32:28.122995107 +0100 > +++ aaron_nameref_working.sh 2013-01-24 22:32:14.169997998 +0100 > @@ -22,10 +22,11 @@ > set -eu > nameref a=$1 > shift > - nameref v > + > print '--- doesn'\''t work' > - for v in "${a[@]}" > + for vn in "${a[@]}" > do > + nameref v=$vn > print "${!v}" = "$v" > done > print '---' > -- snip -- > > The fix is simply to re-declare the nameref each time it should alias > a new variable (or array element). > > ---- > > Bye, > Roland > > -- > __ . . __ > (o.\ \/ /.o) [email protected] > \__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer > /O /==\ O\ TEL +49 641 3992797 > (;O/ \/ \O;) > _______________________________________________ > ast-users mailing list > [email protected] > http://lists.research.att.com/mailman/listinfo/ast-users >
_______________________________________________ ast-users mailing list [email protected] http://lists.research.att.com/mailman/listinfo/ast-users
