From a7f6c4c5837ac4174f7ff176a2f2754859c30014 Mon Sep 17 00:00:00 2001 From: Andrey Novikov Date: Fri, 1 Nov 2024 07:24:06 +0900 Subject: [PATCH] Re-add global env variable substitution (#227) Co-authored-by: Stanislau Arsoba --- fixtures/substitutions.env | 1 + godotenv_test.go | 8 +++++++- parser.go | 7 +++++++ 3 files changed, 15 insertions(+), 1 deletion(-) 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