Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

What's the difference between:

a=b

and

export a=b

In bash?

I understand that they both define environment variables, but I don't fully understand the difference.

share|improve this question
    
Could somebody please edit this? This is not at all related to Linux, but depend only on the shell you are using. I guess it's bash here, which also works on Windows. –  innaM Aug 6 '09 at 12:52
    
I stand corrected. –  Adam Matan Aug 6 '09 at 12:58
    
Thank you. –  innaM Aug 6 '09 at 13:23

4 Answers 4

up vote 33 down vote accepted

export propagates the variable to subprocesses.

For example, if you did

FOO=bar

then a subprocess that checked for FOO wouldn't find the variable whereas

export FOO=bar

would allow the subprocess to find it.

But if FOO has already been defined as an environment variable, then FOO=bar will modify the value of that environment variable.

For example:

FOO=one     # Not an environment variable
export FOO  # Now FOO is an environment variable
FOO=two     # Update the environment variable, so sub processes will see $FOO = "two"

Older shells didn't support the export FOO=bar syntax; you had to write FOO=bar; export FOO.

share|improve this answer
23  
Actually, if you don't use "export", you're not defining an environment variable, but just a shell variable. Shell variables are only available to the shell process; environment variables are available to any subsequent process, not just shells. In addition, subshells are commands contained within parentheses, which do have access to shell variables, whereas what you're talking about are child processes that happen to be shells. –  wfaulk Sep 28 '09 at 12:02
    
Where are these stored? –  HDave Mar 18 '13 at 21:45

Also, if you want to have the variable available to the calling shell without using export you can do this:

File a.ksh is -

#!/bin/ksh
FOO=bar

On the prompt, run this is

> . a.ksh

This will run the commands within the same shell and $FOO will be available.

Whereas,

> a.ksh

Will make $FOO available only within a.ksh, after the call to a.ksh it would not exist.

share|improve this answer
1  
Correct. Note that "." is just a shortcut for "source", which is sometimes used in scripts for better readability. See "help ." or "help source" for details. –  sleske Feb 11 '10 at 22:58

Actually, if you don't use "export", you're not defining an environment variable, but just a shell variable.

Shell variables are only available to the shell process; environment variables are available to any subsequent process, not just shells.

share|improve this answer

In addition to what has already been answered, both of these statement do not necessarily define (i.e. create vs set) an environment variable as "a" might already exist as a shell or environment variable.

In the latter case, both statements are strictly equivalent.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.