Summary
If .env references a variable (e.g. ${FOO}) which is not already set (either via the external environment, or in the .env file, it is left unexpanded.
This is in contrast to the following other languages / implementations which will expand the variable to an empty string:
Demo
Consider this .env file:
# A simple, constant env var
CONST='A constant env var'
# Derived from another variable
DERIV="I came from ${CONST} with some more"
# An environment variable we expect to be set on the outside
EXT_SET=${ENV_EXT_SET}
# An environment variable we expect *not* to be set on the outside
EXT_UNSET=${ENV_EXT_UNSET}
When loaded by bash, EXT_UNSET will get the value "" (that is, the empty string).
When loaded by phpdotenv v5.2.0, EXT_UNSET will get the value "${ENV_EXT_UNSET}" (literally).
See this gist for a full reproducible example:
$ pip3 install scuba
$ ./prepare.sh
$ ./run_test.sh
------------------------------------------------------
Bash:
CONST=A constant env var
DERIV=I came from A constant env var with some more
EXT_SET=set externally
EXT_UNSET=
------------------------------------------------------
phpdotenv:
$_ENV = Array
(
[CONST] => A constant env var
[DERIV] => I came from A constant env var with some more
[EXT_SET] => set externally
[EXT_UNSET] => ${ENV_EXT_UNSET}
)
------------------------------------------------------
python-dotenv:
CONST=A constant env var
DERIV=I came from A constant env var with some more
EXT_SET=set externally
EXT_UNSET=
References
Summary
If
.envreferences a variable (e.g.${FOO}) which is not already set (either via the external environment, or in the.envfile, it is left unexpanded.This is in contrast to the following other languages / implementations which will expand the variable to an empty string:
source)Demo
Consider this
.envfile:When loaded by bash,
EXT_UNSETwill get the value""(that is, the empty string).When loaded by
phpdotenv v5.2.0,EXT_UNSETwill get the value"${ENV_EXT_UNSET}"(literally).See this gist for a full reproducible example:
References