On Mon, Jun 8, 2009 at 11:19 PM, Allan McRae<[email protected]> wrote:
>> -               eval "${indirect}=\"${!var}\""
>> +               eval "${indirect}=(\${$v...@]})"
>>
>
> Bonus points for anyone who understands what I was doing and what is being
> done now...  All I know is that is works!  :)

Well... what it was doing previously, I don't know. I can't seem to
find docs on what ! does in this context.

But what it's doing now is easy to understand. The non-confusing parts
of the string:
   eval "something=( .......... )"
Well, that's understandable... let's go in one step:
   \${.....@]}
OK, that makes sense too... one more step:
   $var

Ok, so $var is expanded (say, to 'foo'), and then we snag the contents
of foo (${f...@]}), and then put all that back in some new array, for
safekeeping.

Re: the ${!foo} syntax: http://tldp.org/LDP/abs/html/bashver2.html#VARREFNEW

It's shorthand for this:

foo="bar"
bar=5

now I want the value specified by the string in $foo

previously, you would do:
eval "myvar=\$$foo", which equates to "myval=\$bar" and then "myval=5"

The ! syntax makes this less confusing. myval=${!foo} does the exact same thing
_______________________________________________
pacman-dev mailing list
[email protected]
http://www.archlinux.org/mailman/listinfo/pacman-dev

Reply via email to