How do I delete an exported environment variable?
Solution 1
unset
is the command you're looking for.
unset GNUPLOT_DRIVER_DIR
Solution 2
Walkthrough of creating and deleting an environment variable in Bash:
Test if the DUALCASE variable exists (empty output):
env | grep DUALCASE
It does not, so create the variable and export it:
DUALCASE=1
export DUALCASE
Check if it is there:
env | grep DUALCASE
Output:
DUALCASE=1
It is there. So get rid of it:
unset DUALCASE
Check if it's still there (empty output):
env | grep DUALCASE
The DUALCASE exported environment variable is deleted.
Extra commands to help clear your local and environment variables:
Unset all local variables back to default on login:
CAN="chuck norris"
set | grep CAN
Output:
CAN='chuck norris'
env | grep CAN # Empty output
exec bash
set | grep CAN
env | grep CAN # Empty output
exec bash
command cleared all the local variables, but not environment variables.
Unset all environment variables back to default on login:
export DOGE="so wow"
env | grep DOGE
Output:
DOGE=so wow
env -i bash
env | grep DOGE # Empty output
env -i bash
command cleared all the environment variables to default on login.
Solution 3
The original question doesn't mention how the variable was set, but:
In C shell (csh/tcsh) there are two ways to set an environment variable:
set x = "something"
setenv x "something"
The difference in the behaviour is that variables set with the setenv command are automatically exported to a subshell while variables set with set aren't.
To unset a variable set with set, use
unset x
To unset a variable set with setenv, use
unsetenv x
Note: in all the above, I assume that the variable name is 'x'.
Credits:
Solution 4
This may also work.
export GNUPLOT_DRIVER_DIR=
Solution 5
As mentioned in the above answers, unset GNUPLOT_DRIVER_DIR
should work if you have used export
to set the variable. If you have set it permanently in ~/.bashrc
or ~/.zshrc
then simply removing it from there will work.
A. K.
llvm + clang contributor Compiler Engineer, Facebook, California Twitter: hiraditya
Updated on July 13, 2022Comments
-
A. K. almost 2 years
Before installing gnuplot, I set the environment variable
GNUPLOT_DRIVER_DIR = /home/gnuplot/build/src
. During the installation, something went wrong.I want to remove the
GNUPLOT_DRIVER_DIR
environment variable. How can I achieve it?-
Elijah Lynn about 5 yearsFor those looking for how to do this in Fish shell see stackoverflow.com/questions/30703860/… (even though this question isn't for a specific shell)
-
-
eLRuLL about 10 yearsbut this only works for a session, what about unsetting it definitely? or maybe searching where is the variable set, so you can go and delete it?
-
matt5784 about 10 yearsThis should work per terminal instance. Generally, each time a terminal window is opened, it will load up variables from various places such as ~/.bashrc, ~/.profile, etc. Any variables you set in one terminal instance will not carry over to another. If you have a variable which seems to be set automatically every time you open terminal, try looking through the various hidden files in your home directory for it. Or, to see where it is being set, try "grep -r <X> ~" where <X> is the name of the variable. This may take a while if you have a lot of files in your home directory.
-
Rodrigo Gurgel over 8 yearsmaybe
echo $VARIABLE
is better thanenv | grep VARIABLE
, it's lighter as it doesn't need to print all variables and then send its output to another (grep) process. Plus,env | VARIABLE
could catch more than one variable that matches the same pattern. Plus2,echo $VARIABLE
makes possible to complete variable's name by hitting <Tab> (if it exists, that also may be a hint to what you wanna do). -
calasyr over 7 years'env | grep VARIABLE' is better than 'echo $VARIABLE' because I can tell it's truly gone
-
hmijail over 7 years@RodrigoGurgel,
echo $VARIABLE
doesn't tell you whether the VARIABLE is a shell variable (here called "local variable") or an environment variable, which is the whole point of the walkthrough. -
olejorgenb over 7 yearsThis removes the variable from the shell too though. Is the only way to
unexport
to doT="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T
? -
Peder Klingenberg over 7 years@olejorgenb At least in bash, you can say
declare +x MYVAR
to remove the export but keep the value in the current shell. -
jarno about 7 years@PederKlingenberg
export -n MYWAR
works as well in Bash. -
Mark Chackerian almost 7 yearsNote that
env -i bash
seems to be creating a subshell (at least on a Mac) which may have unintended consequences. -
Palec over 6 yearsThe variable still exists, but it contains an empty string, as you can see in the output of the
env
command. It just might be the case that the application that uses the variable does not distinguish between non-existent and empty environment variable. -
Nilesh K. over 6 yearsyes it will contain, this was just to remove value not to remove variable. But yes one can use - unset GNUPLOT_DRIVER_DIR.
-
Thomas B in BDX over 5 years@RodrigoGurgel using echo won't show existing variable set to empty string or nul. to your point, though, a proper way to test for variable would be
env | grep -e '^VARNAME='
. -
4levels about 5 yearsGreat addition about the differences between set / setenv wrt subshells!
-
Chad over 4 yearsThis doesn't work in the case of the PAGER variable. I tried to unset my PAGER setting with
export PAGER=
, but that just disabled paging entirely--all my man pages just dumped straight to the terminal.unset PAGER
did the trick, reverting it to default behaviour. -
Peter Mortensen over 2 yearsPerhaps it is time to update your answer? (But without "Edit:", "Update:", or similar - the question/answer should appear as if it was written today.)