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

A. *_* K. 1439 linux environment-variables unset

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

我想删除GNUPLOT_DRIVER_DIR环境变量.我怎样才能实现它?

Ped*_*erg 2284

unset 是你正在寻找的命令.

unset GNUPLOT_DRIVER_DIR
Run Code Online (Sandbox Code Playgroud)

  • 这应该适用于每个终端实例.通常,每次打开终端窗口时,它都会从各个位置加载变量,例如〜/ .bashrc,〜/ .profile等.您在一个终端实例中设置的任何变量都不会转移到另一个终端实例.如果您有一个似乎每次打开终端时自动设置的变量,请尝试查看主目录中的各种隐藏文件.或者,要查看它的设置位置,请尝试"grep -r <X>〜",其中<X>是变量的名称.如果您的主目录中有大量文件,这可能需要一段时间. (29认同)
  • @olejorgenb 至少在 bash 中,您可以说 `declare +x MYVAR` 来删除导出但保留当前 shell 中的值。 (4认同)
  • 但是这只适用于一个会话,那么取消它肯定会怎么样?或者可能搜索变量集在哪里,所以你可以去删除它? (3认同)
  • @PederKlingenberg`export -n MYWAR`在Bash中也可以使用。 (3认同)
  • 不过,这也会从 shell 中删除变量。是`unexport` 做`T="$MYVAR" 的唯一方法;取消设置 MYVAR;MYVAR="$T"; 取消设置 T`? (2认同)

Eri*_*ski 161

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

测试DUALCASE变量是否存在:

el@apollo:~$ env | grep DUALCASE
el@apollo:~$ 
Run Code Online (Sandbox Code Playgroud)

它没有,所以创建变量并导出它:

el@apollo:~$ DUALCASE=1
el@apollo:~$ export DUALCASE
Run Code Online (Sandbox Code Playgroud)

检查它是否存在:

el@apollo:~$ env | grep DUALCASE
DUALCASE=1
Run Code Online (Sandbox Code Playgroud)

它就在那里.所以摆脱它:

el@apollo:~$ unset DUALCASE
Run Code Online (Sandbox Code Playgroud)

检查它是否仍然存在:

el@apollo:~$ env | grep DUALCASE
el@apollo:~$ 
Run Code Online (Sandbox Code Playgroud)

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:~$
Run Code Online (Sandbox Code Playgroud)

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:~$
Run Code Online (Sandbox Code Playgroud)

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

  • 也许`echo $ VARIABLE`比`env |更好 grep VARIABLE`,它更轻,因为它不需要打印所有变量然后将其输出发送到另一个(grep)进程.另外,`env | VARIABLE`可以捕获多个匹配相同模式的变量.Plus2,`echo $ VARIABLE`可以通过点击<Tab>来完成变量的名称(如果它存在,那也可能暗示你想做什么). (10认同)
  • 'env | grep VARIABLE'比'echo $ VARIABLE'更好,因为我可以说它真的消失了 (8认同)
  • @RodrigoGurgel,`echo $ VARIABLE`没有告诉你VARIABLE是一个shell变量(这里称为"局部变量")还是环境变量,这是演练的重点. (7认同)
  • 请注意,`env -i bash`似乎正在创建一个子shell(至少在Mac上),这可能会产生意想不到的后果. (3认同)
  • @RodrigoGurgel 使用 echo 不会显示设置为空字符串或 nul 的现有变量。不过,就您而言,测试变量的正确方法是`env | grep -e '^VARNAME='`。 (3认同)

kri*_*yaa 18

在 Linux 和 macOS 上,您可以使用该命令unset删除环境变量。

unset GNUPLOT_DRIVER_DIR
Run Code Online (Sandbox Code Playgroud)

永久删除变量,

在Linux中

您可以编辑您的 shell 配置文件,例如目录中的.bashrc或,并删除导出变量的行。.bash_profile/etc/profile.d

.bashrc file:

nano ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

然后,搜索行导出GNUPLOT_DRIVER_DIR并将其删除。然后保存文件。

在 Windows 中

使用setx命令删除环境变量。

setx GNUPLOT_DRIVER_DIR ""
Run Code Online (Sandbox Code Playgroud)

您可以在以下链接中找到有关环境变量以及如何管理它们的更多信息:


小智 12

正如上面的答案中提到的,unset GNUPLOT_DRIVER_DIR如果您曾经export设置过变量,那么应该可以工作。如果您已将其永久设置,~/.bashrc或者~/.zshrc只需将其从那里删除即可。


小智 7

这也可行.

export GNUPLOT_DRIVER_DIR=
Run Code Online (Sandbox Code Playgroud)

  • 该变量仍然存在,但它包含一个空字符串,您可以在`env`命令的输出中看到.可能的情况是,使用变量的应用程序不区分不存在的和空的环境变量. (14认同)

小智 5

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

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

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

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

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

unset x
Run Code Online (Sandbox Code Playgroud)

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

unsetenv x
Run Code Online (Sandbox Code Playgroud)

注意:在以上所有内容中,我都假定变量名称为“ 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