diff --git a/fixtures/substitutions.env b/fixtures/substitutions.env index 44337a9..c677214 100644 --- a/fixtures/substitutions.env +++ b/fixtures/substitutions.env @@ -3,3 +3,4 @@ OPTION_B=${OPTION_A} OPTION_C=$OPTION_B OPTION_D=${OPTION_A}${OPTION_B} OPTION_E=${OPTION_NOT_DEFINED} +OPTION_F=${GLOBAL_OPTION} diff --git a/godotenv_test.go b/godotenv_test.go index c6d7e54..c6b5725 100644 --- a/godotenv_test.go +++ b/godotenv_test.go @@ -207,15 +207,21 @@ func TestLoadQuotedEnv(t *testing.T) { func TestSubstitutions(t *testing.T) { envFileName := "fixtures/substitutions.env" + + presets := map[string]string{ + "GLOBAL_OPTION": "global", + } + expectedValues := map[string]string{ "OPTION_A": "1", "OPTION_B": "1", "OPTION_C": "1", "OPTION_D": "11", "OPTION_E": "", + "OPTION_F": "global", } - loadEnvAndCompareValues(t, Load, envFileName, expectedValues, noopPresets) + loadEnvAndCompareValues(t, Load, envFileName, expectedValues, presets) } func TestExpanding(t *testing.T) { diff --git a/parser.go b/parser.go index cc709af..098f05d 100644 --- a/parser.go +++ b/parser.go @@ -4,6 +4,7 @@ import ( "bytes" "errors" "fmt" + "os" "regexp" "strings" "unicode" @@ -264,6 +265,12 @@ func expandVariables(v string, m map[string]string) string { if submatch[1] == "\\" || submatch[2] == "(" { return submatch[0][1:] } else if submatch[4] != "" { + if val, ok := m[submatch[4]]; ok { + return val + } + if val, ok := os.LookupEnv(submatch[4]); ok { + return val + } return m[submatch[4]] } return s