如何在命令行中取消设置变量?


80

我已经尝试使用以下命令在上设置Proxy yaourt

export ALL_PROXY=http://proxy.example.com:8080

问题是如何取消设置代理yaourt?通常,如何在当前shell中取消设置变量的值?


7
试试unset ALL_PROXY
coffeMug ​​2013年

@coffeMug可能也可以作为答案,您也可以考虑从此处窃取一些信息:stackoverflow.com/a/12263914/1081936
terdon

除了可接受的答案外,如果您经常运行某个命令,而该命令使用的环境变量在其余的Shell会话中您不想设置或更改,则可以像这样运行它:$ ALL_PROXY=http://proxy.example.com:8080 yaourt这将只为命令运行。您可以FOO=bar BAZ=bat在命令运行之前放置任意数量的变量。
onlynone

Answers:


112

要删除环境变量,请运行

unset ALL_PROXY

请注意,环境变量仅在程序及其启动的程序中生效。如果在一个外壳程序窗口中设置环境变量,则它不会影响其他外壳程序窗口。

如果已添加export ALL_PROXY=…到初始化文件,请从那里删除它。

您可以export不带任何参数运行,以查看在当前shell中设置了哪些环境变量。

请记住,要使外壳程序变量对该外壳程序启动的程序可用,您需要通过export VAR在赋值后运行VAR=VALUE或将两者(export VAR=VALUE)组合来导出该变量。


19

要在bash中取消设置绑定变量,请使用unset VARIABLEunset ALL_PROXY根据您的情况)。该命令实际上删除了变量。您还可以通过以下方式将变量的值设置为空

VARIABLE=

要么

VARIABLE=""

区别在于后两个命令不会删除该变量。您可以通过使用-u标志with set强制其将替换时将未设置的变量视为错误来查看差异:

/home/user1> var=""
/home/user1> echo $var

/home/user1> set -u
/home/user1> echo $var

/home/user1> unset var
/home/user1> echo $var
-bash: var: unbound variable

在上面的示例中,bash抱怨var未绑定(未设置其值),这是预期的错误(请注意,这在第二个echo命令中不会发生,这意味着var值为emptynull)。


如果我的Shell脚本文件中有一个变量并提供了该文件的源代码,那该怎么办呢?
Abhinav

@Abhinav unset在脚本中使用。同样适用。
coffeMug
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.