java System.getenv environment names starting with "="

Klitos Kyriacou

I've noticed that the environment in Java on Windows (as obtained by a System.getenv() call) includes some variables that don't exist in the real environment. These begin with and equals-sign and include "=ExitCode" which maps to the exit code of the process that ran just before this java invokation; and the default directories of various drive letters, such as "=C:", "=D:". This seems to be the case with all of Sun's Java versions, running on all Windows versions. Is this documented anywhere, or is it purely for Sun's internal only?

Edit Here's a simple example application to show what I mean. Compile and run this on the command line:

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());
    }
}

Then compare the variables with the SET command (from cmd.exe) or with similar command-line program written in C. You'll find the variables beginning with = don't exist in those:

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

These variables are obviously added during execution of the JVM.

Sergey Kalinichenko

System variables that start in equal sign are real. What you observe is not Java adding more environment variables; it is SET command hiding some of the variables.

Windows prohibits the use of equal sign in names of environment variables that users can set, thus reserving variables with = in them for internal use. These variables can be retrieved through windows APIs, e.g. GetEnvironmentStringsW. Java library does not filter this list, so the special variables become available to your code. SET command of Windows, on the other hand, filters them out, creating a discrepancy.

According to this answer, these "magic" variables are there for backward compatibility with ms-dos directory handling, so you can safely ignore them.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

How can I get Spring Boot to load the Java System.getenv() variables into the Environment object?

Java System.getenv does not resolve environment variable defined in docker-compose

The performance impact of use System.getenv() in java

System.getenv() returns null when the environment variable exists

TOMCAT_OPTS, environment variable and System.getEnv()

how to set environment variable java unix .getenv(NOT_WORKING)

Difference between System.getenv(/**vName**/) & Auto-wiring Environment and doing environment.getProperty("myProp");

environment variables sent to a JAR file are accessible in System.getProperty, but in System.getenv

On Java 9 why is the output from System.getenv() incomplete in jshell?

Boolean.getBoolean() Vs System.getenv() in Java

How to create menu for environment variable names and values starting with $zv?

Java system properties and environment variables

System.getenv() call in JVM

System.getenv still picks up deleted env variable value on MacOS Mojave - Java

envirnoment variable set on terminal but System.getenv returns null. java problems

"Unable to load Java Runtime Environment" when starting SQLWorkbench/J

Java - Read out system environment during startup

Identify names starting with punctuation

Display names starting with L

PowerMockito+Junit - Mocking System.getenv

Mocking System.getenv other than with powermock

How to JMockIt System.getenv(String)?

What is the system effect of starting large quantities of timers in Java?

Difference between System.getenv() & System.getProperty()

Symfony 5 Functional Tests - Environment Variables missing, getenv() returns false

How to Loads environment variables from .env to getenv() PHP MVC

Do envz_get and getenv reference the same pool of environment variables?

os.getenv("username") not returning environment variable instead my name

Using getenv() to read environment variable returns NULL C++

TOP Ranking

  1. 1

    Failed to listen on localhost:8000 (reason: Cannot assign requested address)

  2. 2

    Loopback Error: connect ECONNREFUSED 127.0.0.1:3306 (MAMP)

  3. 3

    How to import an asset in swift using Bundle.main.path() in a react-native native module

  4. 4

    pump.io port in URL

  5. 5

    Compiler error CS0246 (type or namespace not found) on using Ninject in ASP.NET vNext

  6. 6

    BigQuery - concatenate ignoring NULL

  7. 7

    ngClass error (Can't bind ngClass since it isn't a known property of div) in Angular 11.0.3

  8. 8

    ggplotly no applicable method for 'plotly_build' applied to an object of class "NULL" if statements

  9. 9

    Spring Boot JPA PostgreSQL Web App - Internal Authentication Error

  10. 10

    How to remove the extra space from right in a webview?

  11. 11

    java.lang.NullPointerException: Cannot read the array length because "<local3>" is null

  12. 12

    Jquery different data trapped from direct mousedown event and simulation via $(this).trigger('mousedown');

  13. 13

    flutter: dropdown item programmatically unselect problem

  14. 14

    How to use merge windows unallocated space into Ubuntu using GParted?

  15. 15

    Change dd-mm-yyyy date format of dataframe date column to yyyy-mm-dd

  16. 16

    Nuget add packages gives access denied errors

  17. 17

    Svchost high CPU from Microsoft.BingWeather app errors

  18. 18

    Can't pre-populate phone number and message body in SMS link on iPhones when SMS app is not running in the background

  19. 19

    12.04.3--- Dconf Editor won't show com>canonical>unity option

  20. 20

    Any way to remove trailing whitespace *FOR EDITED* lines in Eclipse [for Java]?

  21. 21

    maven-jaxb2-plugin cannot generate classes due to two declarations cause a collision in ObjectFactory class

HotTag

Archive