据我了解,set
用于设置shell变量。和..
我的理解是export
用于设定环境变量。
那么,unset
删除环境变量而不是shell变量有什么好的理由吗?
E.g。当我通过export VAR='something'
导出变量时,我可以执行unset VAR
而{I} printenv
,我发现它不再被列出了。
但是,我找不到删除局部变量的等价物?或unset
用词不当?感谢。
答案 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等)与变量几乎没什么关系。