Subject: Re: About ENV?
From: "John Vincent" <[email-masked]>
To: [email-masked]
Cc: [email-masked]
Date: Fri, 25 Oct 2002 08:56:52 +0000

Hi Igor,

I agree with what you say except for one point: the command

AAA=aaa echo $AAA

does **NOT** set the shell variable AAA. Not before the echo
command, not after the echo command. The shell variable is
unchanged by this command. Only the environment variable
AAA in the environment of the echo is changed. The echo is
passed as argument the value of the AAA **shell** variable,
not the AAA **environment** variable. (And as you say, this
is expanded by the shell)

Confusion in terminology sometimes arises because whenever
a new shell starts, it initialises it's shell variables
with the values it inherits from it's environment, people
often forget that these two sets of variables are really
quite independent, even though the shell deliberately tries
to blur the destinction.

I hope we're all clear now.

/John Vincent.

>From: Igor Pechtchanski <[email-masked]>
>Reply-To: [email-masked]
>To: John Vincent <[email-masked]>
>CC: [email-masked]
>Subject: Re: About ENV?
>Date: Thu, 24 Oct 2002 14:13:55 -0400 (EDT)
>
>John,
>
>I fully understand your example.  And I think it's you who is confused.
>
>The example I provided was intended to illustrate that even though the
>environment variable AAA *is* set to "aaa", the echo command *never sees*
>that new value, as the sequence '$AAA' is expanded by the *originating
>shell*, rather than the echo command itself.  In fact, the echo command is
>not even aware it's echoing the value of some environment variable -- all
>it sees is the value.  The parts of the example with the single quotes and
>invoking another shell illustrated that once you protect the '$' from the
>originating shell, the new shell *does* pick up the new value of the
>environment variable.
>
>In other words, if you invoke a shell script that internally uses the
>value of AAA, it will see the new value.  However, all the echo command
>sees is the *value* of AAA, expanded for it by the originating shell,
>which expansion happened *before* the assignment was in effect.
>
>A careful reading of the bash man page, particularly the section on
>variable substitution, might be helpful here.
>	Igor
>
>On Thu, 24 Oct 2002, John Vincent wrote:
>
> > Hi,
> >
> > I think you are confusing shell variables with environment
> > variables. This is easy to do if you are not careful, since
> > shell variables can be put into the environment using the
> > "export" built-in command.
> >
> > Still, they are different things, and in this case the assignment
> > is to an environment variable, not to a shell variable. It's
> > done to keep backwards-compatibility with old shell scripts.
> >
> > The command:
> >
> > AAA=aaa echo $AAA
> >
> > does NOT change the shell variable AAA it changes the environment
> > variable AAA for the echo command only. Maybe this example will
> > make it clearer:
> >
> > Administrator@JPV ~
> > $ AAA=bbb
> >
> > Administrator@JPV ~
> > $ AAA=aaa echo $AAA
> > bbb
> >
> > Administrator@JPV ~
> > $
> >
> > In the above example the echo command is run with an environment
> > variable AAA with a value of "aaa" but the shell variable AAA is
> > passed with a value of "bbb" set on the previous line.
> >
> > I hope this helps.
> >
> > /John Vincent.
> >
> >
> > >From: Igor Pechtchanski <[email-masked]>
> > >Reply-To: [email-masked]
> > >To: Andrew DeFaria <[email-masked]>
> > >CC: [email-masked]
> > >Subject: Re: About ENV?
> > >Date: Fri, 18 Oct 2002 11:36:49 -0400 (EDT)
> > >
> > >On Fri, 18 Oct 2002, Andrew DeFaria wrote:
> > >
> > > > John Vincent wrote:
> > > >
> > > > > Hi,
> > > > >
> > > > > Not quite right there ... You can preceed a command with an
> > > > > assignment, and the assigned variable is then put into the 
>environment
> > > > > of the command that is run. Thus the command
> > > > > "echo" is run with an environment variable AAAA with the value 
>aaaa.
> > > > > However, this does not change the AAAA shell variable (which is
> > > > > currently empty) so the echo prints a blank (it's empty argument) 
>and
> > > > > ignores the AAAA in it's environment.
> > > > >
> > > > > This syntax is useful for setting environment variables for one
> > > > > command invocation only. They are not saved.
> > > > >
> > > > > I hope this fully explains what is going on.
> > > >
> > > > It doesn't. If "This syntax is useful for setting environment 
>variables
> > > > for one command invocation only" then the echo command should have
> > > > echoed "aaa". Otherwise the syntax is not useful for setting 
>environment
> > > > variables for one command invocation. Perhaps what is meant is that 
>this
> > > > syntax is useful for overriding environment variables for one 
>command
> > > > invocation? However this leaves a glaring inconsistancy prone to 
>error
> > > > if the variable was not set already then no override takes place.
> > >
> > >Andrew,
> > >
> > >[pechtcha:~] AAAA=aaa && echo $AAAA
> > >aaa
> > >[pechtcha:~] AAAA=aaa echo $AAAA
> > >
> > >[pechtcha:~] AAAA=aaa eval 'echo $AAAA'
> > >aaa
> > >[pechtcha:~] AAAA=aaa sh -c 'echo $AAAA'
> > >aaa
> > >[pechtcha:~]
> > >
> > >Does this help?
> > >       Igor
>
>--
>				http://cs.nyu.edu/~pechtcha/
>       |\      _,,,---,,_		[email-masked]
>ZZZzz /,`.-'`'    -.  ;-;;,_		[email-masked]
>      |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski
>     '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!
>
>"Water molecules expand as they grow warmer" (C) Popular Science, Oct'02, 
>p.51

_________________________________________________________________
Unlimited Internet access -- and 2 months free!  Try MSN. 
http://resourcecenter.msn.com/access/plans/2monthsfree.asp

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/