恢复以前的值或取消设置环境变量,无需子shell

问题描述 投票:0回答:1

这与这个问题几乎相同(但是不一样!)。我想保存和恢复单个环境变量,如果未设置则将其保留为未设置。但与这个问题不同的是,我没有使用子 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
。我该怎么做?

bash environment-variables
1个回答
0
投票
  • 最简单的方法是将代码包装在函数中并使用
    local
    内置函数。 (Bash 使用动态局部作用域,因此这正是您所描述的行为,即保存原始变量然后恢复它。)
  • 如果由于某种原因这不是一个选择,那么:
    • 要测试是否设置了名为 SOMEVAR 的变量,您可以编写例如
      ${SOMEVAR+yes}
      ,如果已设置,则扩展为
      yes
      ,否则扩展为空字符串。 (您可以将其保存在名为
      was_SOMEVAR_set
      的变量中,然后写入
      if [[ "$was_SOMEVAR_set" ]]
      。)
    • 如果设置了,那么您当然可以将其值保存在另一个变量中以便稍后恢复。
    • 如果
    • 设置,那么您将在完成后使用内置的unset
      来恢复它。
© www.soinside.com 2019 - 2024. All rights reserved.