这与这个问题几乎相同(但是不一样!)。我想保存和恢复单个环境变量,如果未设置则将其保留为未设置。但与这个问题不同的是,我没有使用子 shell 的选项,因为“中间”命令设置了我想保留的一些其他环境变量。即
$ cat ./myenv.sh
export SOME_VAR=1
export OTHER_VAR=1
$ save SOME_VAR
$ source ./myenv.sh
$ restore SOME_VAR
此后
SOME_VAR
应取消设置,并且 OTHER_VAR
应为 1
。我该怎么做?
local
内置函数。 (Bash 使用动态局部作用域,因此这正是您所描述的行为,即保存原始变量然后恢复它。)${SOMEVAR+yes}
,如果已设置,则扩展为 yes
,否则扩展为空字符串。 (您可以将其保存在名为 was_SOMEVAR_set
的变量中,然后写入 if [[ "$was_SOMEVAR_set" ]]
。)unset
来恢复它。