Kli*_*cou 8 java environment-variables
我注意到Windows上的Java环境(通过System.getenv()调用获得)包含一些在真实环境中不存在的变量.这些以&equals-sign开头并包含"= ExitCode",它映射到在此java invokation之前运行的进程的退出代码; 以及各种驱动器号的默认目录,例如"= C:","= D:".在所有Windows版本上运行的所有Sun Java版本似乎都是这种情况.这是在任何地方记录的,还是纯粹仅供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());
}
}
Run Code Online (Sandbox Code Playgroud)
然后将变量与SET命令(来自cmd.exe)或用C编写的类似命令行程序进行比较.您将发现以=开头的变量不存在于:
=ExitCode = 00000000 =:: = ::\ =C: = C:\Temp
这些变量显然是在执行JVM期间添加的.
以等号开头的系统变量是实数。你观察到的并不是Java添加了更多的环境变量;而是Java添加了更多的环境变量。它是隐藏一些变量的SET命令。
Windows 禁止在用户可以设置的环境变量名称中使用等号,从而保留=其中的变量供内部使用。这些变量可以通过 Windows API 检索,例如GetEnvironmentStringsW。Java 库不会过滤此列表,因此特殊变量可用于您的代码。SET另一方面,Windows 命令会过滤掉它们,从而产生差异。
根据这个答案,这些“神奇”变量的存在是为了向后兼容 ms-dos 目录处理,因此您可以安全地忽略它们。
| 归档时间: |
|
| 查看次数: |
809 次 |
| 最近记录: |