delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2002/10/24/14:14:16

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
X-Authentication-Warning: slinky.cs.nyu.edu: pechtcha owned process doing -bs
Date: Thu, 24 Oct 2002 14:13:55 -0400 (EDT)
From: Igor Pechtchanski <pechtcha AT cs DOT nyu DOT edu>
Reply-To: cygwin AT cygwin DOT com
To: John Vincent <jpv50 AT hotmail DOT com>
cc: cygwin AT cygwin DOT com
Subject: Re: About ENV?
In-Reply-To: <F157JbqJGNzscE8Npqh00000130@hotmail.com>
Message-ID: <Pine.GSO.4.44.0210241405270.13770-100000@slinky.cs.nyu.edu>
Importance: Normal
MIME-Version: 1.0

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 AT JPV ~
> $ AAA=bbb
>
> Administrator AT JPV ~
> $ AAA=aaa echo $AAA
> bbb
>
> Administrator AT 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 <pechtcha AT cs DOT nyu DOT edu>
> >Reply-To: cygwin AT cygwin DOT com
> >To: Andrew DeFaria <Andrew AT defaria DOT com>
> >CC: cygwin AT cygwin DOT com
> >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/
      |\      _,,,---,,_		pechtcha AT cs DOT nyu DOT edu
ZZZzz /,`.-'`'    -.  ;-;;,_		igor AT watson DOT ibm DOT com
     |,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


--
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/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019