如何删除导出的环境变量?


1556

在安装gnuplot之前,我先设置环境变量GNUPLOT_DRIVER_DIR = /home/gnuplot/build/src。在安装过程中,出现了问题。

我想删除GNUPLOT_DRIVER_DIR环境变量。我该如何实现?


2
对于那些寻找如何在Fish shell中执行此操作的人员,请参阅stackoverflow.com/questions/30703860/…(即使该问题不是针对特定的shell的)
Elijah Lynn

Answers:


2461

unset 是您要查找的命令。

unset GNUPLOT_DRIVER_DIR

4
但这仅适用于会话,确定取消设置该怎么办?还是搜索变量集的位置,以便可以删除它?
eLRuLL 2014年

31
这应在每个终端实例上运行。通常,每次打开终端窗口时,它将从各个位置加载变量,例如〜/ .bashrc,〜/ .profile等。在一个终端实例中设置的任何变量都不会继承到另一个实例。如果您有一个变量,该变量似乎在每次打开终端时都会自动设置,请尝试浏览主目录中的各种隐藏文件。或者,要查看它的设置位置,请尝试“ grep -r <X>〜”,其中<X>是变量的名称。如果您的主目录中有很多文件,则可能需要一段时间。
matt5784 2014年

1
不过这也会从外壳中删除变量。是唯一的方式unexportT="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T
olejorgenb 2016年

1
@olejorgenb至少在bash中,您可以说declare +x MYVAR要删除导出,但将值保留在当前shell中。
Peder Klingenberg

4
@PederKlingenberg export -n MYWAR在Bash中也工作。
杰诺

170

在bash中创建和删除环境变量的演练:

测试DUALCASE变量是否存在:

el@apollo:~$ env | grep DUALCASE
el@apollo:~$ 

它没有,因此创建变量并将其导出:

el@apollo:~$ DUALCASE=1
el@apollo:~$ export DUALCASE

检查是否存在:

el@apollo:~$ env | grep DUALCASE
DUALCASE=1

在那里。因此,摆脱它:

el@apollo:~$ unset DUALCASE

检查它是否仍然存在:

el@apollo:~$ env | grep DUALCASE
el@apollo:~$ 

DUALCASE导出的环境变量被删除。

其他命令可帮助清除您的本地和环境变量:

登录时将所有局部变量重置为默认值:

el@apollo:~$ CAN="chuck norris"
el@apollo:~$ set | grep CAN
CAN='chuck norris'
el@apollo:~$ env | grep CAN
el@apollo:~$
el@apollo:~$ exec bash
el@apollo:~$ set | grep CAN
el@apollo:~$ env | grep CAN
el@apollo:~$

exec bash 命令清除所有局部变量,但不清除环境变量。

登录时将所有环境变量重置为默认值:

el@apollo:~$ export DOGE="so wow"
el@apollo:~$ env | grep DOGE
DOGE=so wow
el@apollo:~$ env -i bash
el@apollo:~$ env | grep DOGE
el@apollo:~$

env -i bash 该命令将所有环境变量清除为登录时的默认值。


10
也许echo $VARIABLE比更好env | grep VARIABLE,因为它不需要打印所有变量,然后将其输出发送到另一个(grep)进程,因此它更轻便。另外,env | VARIABLE可以捕获多个匹配相同模式的变量。Plus2 echo $VARIABLE可以通过按<Tab>来完成变量的名称(如果存在的话,这也可能暗示您想要执行的操作)。
Rodrigo Gurgel

10
'env | grep VARIABLE”优于“ echo $ VARIABLE”,因为我可以说它确实消失了
calasyr

8
@RodrigoGurgel echo $VARIABLE不会告诉您变量是外壳变量(此处称为“局部变量”)还是环境变量,这是本演练的重点。
hmijail哀悼辞职者,2016年

4
请注意,这env -i bash似乎是在创建子外壳程序(至少在Mac上是这样),这可能会产生意想不到的后果。
Mark Chackerian '17

2
使用echo的@RodrigoGurgel不会显示设置为空字符串或nul的现有变量。就您而言,测试变量的正确方法是env | grep -e '^VARNAME='
托马斯

5

因为原始问题没有提到变量的设置方式,并且因为我进入此页面寻找特定答案,所以添加了以下内容:

在C shell(csh / tcsh)中,有两种方法来设置环境变量:

  1. set x = "something"
  2. setenv x "something"

在该问题的不同的是,设置变量SETENV命令自动导出到子shell而可变设定与都没有。

要使用set取消设置变量,请使用

unset x

要使用setenv取消设置变量集,请使用

unsetenv x

注意:在以上所有内容中,我都假定变量名称为“ x”。

学分:

https://www.cyberciti.biz/faq/unix-linux-difference-between-set-and-setenv-c-shell-variable/ https://www.oreilly.com/library/view/solaristm-7-参考/0130200484/0130200484_ch18lev1sec24.html


关于set / setenv wrt子shell之间差异的更多补充!
4levels

4

这也可能起作用。

export GNUPLOT_DRIVER_DIR=

10
该变量仍然存在,但是它包含一个空字符串,如您在env命令输出中所见。使用变量的应用程序可能无法区分不存在的环境变量和空的环境变量。
Palec

1
是的,它将包含,这只是删除值而不是删除变量。但是,可以使用-取消设置GNUPLOT_DRIVER_DIR。
Nilesh K.

对于PAGER变量,这不起作用。我尝试使用取消设置我的PAGER设置export PAGER=,但这只是完全禁用了分页-我的所有手册页都直接转储到了终端。 unset PAGER做到了这一点,将其还原为默认行为。
乍得

1

如以上答案中所述,unset GNUPLOT_DRIVER_DIR如果您曾经export设置过变量,则应该可以使用。如果您将其永久设置在其中,~/.bashrc或者~/.zshrc只需将其从那里删除即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.