以编程方式删除环境变量

Posted

技术标签:

【中文标题】以编程方式删除环境变量【英文标题】:Remove environmental variable programmatically 【发布时间】:2010-07-08 15:23:33 【问题描述】:

我需要为一些 C++ 代码编写一个单元测试来检查环境变量的存在。我使用 MSVS 2008 和 gtest 作为我的框架。我使用 putenv 添加环境变量,我使用 getevn 检查环境变量,但我不知道如何删除它,以免其他测试看到它。我意识到这可能很容易,但我在互联网上找不到答案。谢谢

【问题讨论】:

【参考方案1】:

再次调用putenv 并指定"SOME_VAR=" 作为参数将删除环境变量SOME_VAR。顺便说一句,Microsoft 建议使用 _putenv,因为 putenv 已弃用。

【讨论】:

请注意,至少在 Solaris 上,手册页中没有提及此功能。 他正在使用 MSVS 2008。暗示他正在使用 Windows。在 Linux 上,我会使用 setenv 和 unsetenv。不知道 Solaris 是否有这些。【参考方案2】:

您总是可以 fork/exec 一个子进程来执行 putenv/getenv 测试,然后当它终止时,周围没有任何杂散环境。

【讨论】:

我想到了,但正在寻找更清洁的解决方案【参考方案3】:

如何将环境变量设置为空字符串?

在 cmd.exe 中,这可行:

set SOMEVAR=something
echo %SOMEVAR%
set SOMEVAR=
echo %SOMEVAR%

最后一个显示已被删除的地方。

【讨论】:

【参考方案4】:

您可以使用unsetenv 函数。

如果vc2008缺少这个功能,可以直接使用getenv_s访问环境,手动移除入口,模拟unsetenv

【讨论】:

在不使用 POSIX 子系统的情况下在 Windows 上是否真的可用? Google 出现不一致的结果...

以上是关于以编程方式删除环境变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Jenkins/Hudson 中以编程方式设置环境变量?

以编程方式为 .NET 5 Azure Function ServiceBusTrigger 连接字符串设置环境变量?

shell 编程-02-变量

perl 对ENV环境变量的使用

更改以从环境变量 PATH 中删除路径

Win10下添加环境变量(以QQ为例)