[comp.unix.questions] Why use export?

jeff@quark.WV.TEK.COM (Jeff Beadles) (03/29/90)

rbottin@atl.calstate.edu (Richard John Botting) writes:
>
>Try inserting "; export MANPATH" after "MANPATH=/twolf7/dchen/man"
>
>If that makes it weork the explanation is:
>	'sh'  doesn't hand on variables to a subthing
>	unless you tell it to with an
>	export command...
>	PLUS
>	'[ -f $MANPATH/"$1".1 ]' is actually 'test -f $MANPATH/"$1".1'
>
>
>
>Dick Botting, 
>Department of computer science,
>California State University, San Bernardino, CA 92407
>
>rbottin@atl.calstate.edu
>>INTERNET:rbottin@atl.calstate.edu (Compuserve)
>paaaaar@calstate.bitnet 

This is not correct.  The only reason that you would need to export the
variable "MANPATH" is if you wanted to use it as an environmental variable
in a child program/process.  When you call a program (IE: test) with
arguements on the command line, the shell WILL and does expand them
before calling the program.

Take the following example that passes shell variables as command arguements:

-----------------cut here for look--------------------------
#!/bin/sh

echo "\$1 is $1"
exit 0

-----------------cut here for try--------------------------
#!/bin/sh

./look			# No $VAR here.

VAR='Hello-world'

./look $VAR		# Here it is now.

export VAR

./look $VAR		# It's still here.

exit 0

---------------------End of sample scripts-------------------

Notice the output of the scripts:


Script started on Wed Mar 28 07:52:33 1990
jq:> ./try
$1 is 
$1 is Hello-world
$1 is Hello-world
jq:> exit
script done on Wed Mar 28 07:52:42 1990


Notice the effect of the "export"  (None.)

However, if the program were changed to look like this (And to use environment
variables rather than command line arguements):


-----------------cut here for look2--------------------------
#!/bin/sh

echo "\$VAR is $VAR"
exit 0

-----------------cut here for try2--------------------------
#!/bin/sh

./look2			# Should see nothing for $VAR

VAR='Hello-world'

./look2 $VAR		# Where is $VAR?

export VAR

./look2 $VAR		# There it is.

exit 0

---------------------End of scripts-------------------

Now, notice the output of the scripts:

Script started on Wed Mar 28 07:55:53 1990
jq:> ./try2
$VAR is 
$VAR is 
$VAR is Hello-world
jq:> exit
script done on Wed Mar 28 07:56:02 1990


This is what "export" is all about.


Have fun!

	-Jeff
-- 
Jeff Beadles				jeff@quark.WV.TEK.COM 
Utek Engineering, Tektronix Inc.	+1 503 685 2568
			"Credo quia absurdum"