Linux commands: export
By Flavio
Published · Updated
Tagged: CLI
Learn how the Linux export command makes a variable available to child processes and subshells, how to append to PATH, and the difference between export -n and unset.
The export command is used to export variables to child processes.
What does this mean?
Suppose you have a variable TEST defined in this way:
TEST="test"
You can print its value using echo $TEST:

But if you try defining a Bash script in a file script.sh with the above command:

Then you set chmod u+x script.sh and you execute this script with ./script.sh, the echo $TEST line will print nothing!
This is because in Bash the TEST variable was defined local to the shell. Running ./script.sh starts a new child process (a new shell). That shell only receives the exported variables, the environment.
To make the variable available there we need to define TEST not in this way:
TEST="test"
but in this way:
export TEST="test"
Try that, and running ./script.sh now should print “test”:

Sometimes you need to append something to a variable. It’s often done with the PATH variable. You use this syntax:
export PATH=$PATH:/new/path
It’s common to use export when you create new variables in this way, but also when you create variables in the .bash_profile or .bashrc configuration files with Bash, or in .zshenv with Zsh.
In Bash, export -n TEST only removes the export flag. The variable still exists in the current shell. Child processes stop seeing it.
export -n TEST
To remove the variable, use unset:
unset TEST
zsh, the macOS default shell, does not support export -n. Use typeset +x TEST there.
See how to set environment variables in bash and zsh. env runs a command with a custom environment.
Calling export without any option will list all the exported variables.
The export command works on Linux, macOS, WSL, and anywhere you have a UNIX environment
Want me to talk about your product? You can sponsor this site.
Related posts about cli: