What is the best way to set an environment variable in .bashrc?
Solution 1:
The best way
export VAR=value
The difference
Doing
VAR=value
only sets the variable for the duration of the script (.bashrc
in this case). Child processes (if any) of the script won't have VAR defined, and once the script exits VAR
is gone.
export VAR=value
explicitly adds VAR
to the list of variables that are passed to child processes. Want to try it? Open a shell, do
PS1="foo > "
bash --norc
The new shell gets the default prompt. If instead you do something like
export PS1="foo > "
bash --norc
the new shell gets the prompt you just set.
Update: as Ian Kelling notes below variables set in .bashrc
persist in the shell that sourced .bashrc
. More generally whenever the shell sources a script (using the source scriptname
command) variables set in the script persist for the life of the shell.
Solution 2:
Both seem to work just fine, but using export will ensure the variable is available to subshells and other programs. To test this out try this.
Add these two lines to your .bashrc file
TESTVAR="no export"
export MYTESTVAR="with export"
Then open a new shell.
Running echo $TESTVAR
and echo $MYTESTVAR
will show the contents of each variable. Now inside that same shell remove those two lines from your .bashrc file and run bash
to start a subshell.
Running echo $TESTVAR
will have an empty output, but running echo $MYTESTVAR
will display "with export"