On Mon, Jul 25, 2011 at 4:45 PM, Linda Walsh <b...@tlinx.org> wrote: > > > Linda Walsh wrote: >> >> Bob Proulx wrote: >>> Yes, but it is a fork(2) of the parent shell and all of the variables >>> from the parent are copied along with the fork into the child process >>> and that includes non-exported variables. Normally you would expect >>> that a subprocess wouldn't have access to parent shell variables >>> unless they were exported. But with a subshell a copy of all >>> variables are available. >>> >>> Bob >> -- >> Not really. >> It only seems that way because within () any "$xxxx" is usually >> expanded BEFORE the () starts from the parent.... >> >> You can see this by >> GLOBAL="hi there" >> (echo $GLOBAL) >> prints out "hi there" as expected, but if we hide >> $GLOBAL so it isn't seen by parent: >> (foo=GLOBAL; echo ${!foo}) >> prints "" > --- > I mistyped that but it brings me to an interesting > conundrum: > > GLOBAL="hi there" > {foo=GLOBAL echo ${!foo}; } > >> (foo=GLOBAL echo ${!foo} ) > > But: >> { foo=GLOBAL;echo ${!foo}; } > hi there >> (foo=GLOBAL; echo ${!foo}) > hi there > ---- > Weird... > > >
I'm assuming you meant: GLOBAL="hi there" {foo=$GLOBAL echo ${!foo}; } You had a missing dollar sign. -- Visit serverfault.com to get your system administration questions answered.