为什么"未设置"研究环境变量?

时间:2015-06-08 04:00:49

标签: bash scope cygwin environment-variables

据我了解,set用于设置shell变量。和.. 我的理解是export用于设定环境变量。

那么,unset删除环境变量而不是shell变量有什么好的理由吗?

E.g。当我通过export VAR='something'导出变量时,我可以执行unset VAR而{I} printenv,我发现它不再被列出了。

但是,我找不到删除局部变量的等价物?或unset用词不当?感谢。

1 个答案:

答案 0 :(得分:1)

unset VAR将取消设置变量,无论是本地变量还是环境变量。试试:

$ set | grep '^VAR='
$ VAR=xyz
$ set | grep '^VAR='
VAR=xyz
$ unset VAR
$ set | grep '^VAR='
$

请注意,VAR出现在set的第一批输出中,而不出现在第二批输出中。

由于历史原因,如果没有别的,您可以创建一个变量,然后将其导出。 Bash似乎有一个非常复杂的export输出格式,这反映在下面测试的修订版grep中:

$ unset VAR
$ export | grep '^declare -x VAR='
$ VAR=xyz
$ set | grep '^VAR='
VAR=xyz
$ export | grep '^declare -x VAR='
$ export VAR
$ export | grep '^declare -x VAR='
declare -x VAR="xyz"
$ unset VAR
$ export | grep '^declare -x VAR='
$

Bourne shell中的set命令及其派生词(POSIX,Korn,Bash等)与变量几乎没什么关系。