gpt4 book ai didi

java System.getenv 环境名称以 "="开头

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:54:33 27 4
gpt4 key购买 nike

我注意到 Windows 上 Java 中的环境(通过 System.getenv() 调用获得)包含一些在真实环境中不存在的变量。这些以和等号开头,包括“=ExitCode”,它映射到在此 java 调用之前运行的进程的退出代码;以及各种盘符的默认目录,如“=C:”、“=D:”。 Sun 的所有 Java 版本似乎都是这种情况,在所有 Windows 版本上运行。这在任何地方都有记录,还是仅供 Sun 内部使用?

编辑这是一个简单的示例应用程序来说明我的意思。在命令行上编译并运行它:

import java.util.Map;
class ShowEnv {
public static void main(String[] args) {
for (Map.Entry v : System.getenv().entrySet())
System.out.printf("%-23s= %.54s%n", v.getKey(), v.getValue());
}
}

然后将变量与 SET 命令(来自 cmd.exe)或用 C 编写的类似命令行程序进行比较。您会发现以 = 开头的变量不存在于那些变量中:

=ExitCode              = 00000000=::                    = ::\=C:                    = C:\Temp

这些变量显然是在 JVM 执行期间添加的。

最佳答案

以等号开头的系统变量是实数。您观察到的不是 Java 添加更多的环境变量;而是它是 SET 命令隐藏一些变量。

Windows 禁止在用户可以设置的环境变量名称中使用等号,因此保留其中带有= 的变量供内部使用。这些变量 can be retrieved through windows APIs ,例如获取环境字符串W。 Java 库不过滤此列表,因此特殊变量可用于您的代码。另一方面,Windows 的 SET 命令会过滤掉它们,从而产生差异。

根据 this answer ,这些“神奇”变量的存在是为了向后兼容 ms-dos 目录处理,因此您可以安全地忽略它们。

关于java System.getenv 环境名称以 "="开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30102750/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com