如何取消设置大量环境变量

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

有没有一种方法可以使用一个命令取消设置不同的变量?

unset HTTP_PROXY
unset HTTPS_PROXY
unset FTP_PROXY
unset ALL_PROXY
unset NO_PROXY
linux unset
4个回答
75
投票

unset
采用多个变量:

unset HTTP_PROXY HTTPS_PROXY FTP_PROXY ALL_PROXY NO_PROXY

20
投票

虽然有点晚了,但无论如何。根据您的变量模式,您可以缩短未设置的时间:

  1. 列出你的变量。例如,根据您的范围,您可以使用
    env
    compgen -v
    来完成。
  2. 过滤所需的变量。例如,使用
    grep
    sed
  3. 将变量传递给
    unset

例如您的情况可以是:

unset $(compgen -v | grep "_PROXY$")

这不完全是一个命令,但它模仿了

unset *_PROXY
,正如您在评论中所要求的那样。


3
投票

使用babashka

bb -o '(->> (System/getenv)
            keys
            (filter #(str/ends-with? % "_PROXY"))
            (map #(str "unset " %)))' | 
  source /dev/stdin

0
投票

虽然这不会像OP一样解决不同的前缀变量,但我需要取消设置许多类似名称的变量。互联网搜索继续将我带到这篇文章。最终,我不得不查阅我的 shell 历史记录来重新学习以下技巧。

所以...在这里发帖希望对其他人有帮助:

$ export FOOBAR=true FOOBAZ=true FOOFOO=true
$ env | grep FOO
FOOFOO=true
FOOBAZ=true
FOOBAR=true

$ unset ${!FOO@}
$ env | grep FOO
$ 

我们使用间接变量引用和模式匹配来返回要传递给

unset
的数组。

如果有人知道如何使用间接变量引用执行反向查找模式匹配来解决OP问题,我很乐意听取您的意见!

© www.soinside.com 2019 - 2024. All rights reserved.