diff --git a/dotenv/fixtures/special.env b/dotenv/fixtures/special.env new file mode 100644 index 00000000..5499b0cd --- /dev/null +++ b/dotenv/fixtures/special.env @@ -0,0 +1,3 @@ +VAR.WITH.DOTS=dots +VAR_WITH_UNDERSCORES=underscores +VAR-WITH-DASHES=dashes diff --git a/dotenv/godotenv_test.go b/dotenv/godotenv_test.go index 84f443ef..0d77906c 100644 --- a/dotenv/godotenv_test.go +++ b/dotenv/godotenv_test.go @@ -691,6 +691,14 @@ func TestUTF8BOM(t *testing.T) { loadEnvAndCompareValues(t, Load, envFileName, expectedValues, noopPresets) } +func TestDash(t *testing.T) { + loadEnvAndCompareValues(t, Load, "fixtures/special.env", map[string]string{ + "VAR-WITH-DASHES": "dashes", + "VAR.WITH.DOTS": "dots", + "VAR_WITH_UNDERSCORES": "underscores", + }, noopPresets) +} + func TestGetEnvFromFile(t *testing.T) { wd := t.TempDir() f := filepath.Join(wd, ".env") diff --git a/dotenv/parser.go b/dotenv/parser.go index b1055c96..85dda738 100644 --- a/dotenv/parser.go +++ b/dotenv/parser.go @@ -119,7 +119,7 @@ loop: offset = i + 1 inherited = rune == '\n' break loop - case '_', '.', '[', ']': + case '_', '.', '-', '[', ']': default: // variable name should match [A-Za-z0-9_.-] if unicode.IsLetter(rune) || unicode.IsNumber(rune) { diff --git a/dotenv/parser_test.go b/dotenv/parser_test.go index 6764d583..54580e2a 100644 --- a/dotenv/parser_test.go +++ b/dotenv/parser_test.go @@ -13,17 +13,17 @@ var testInput = ` a=b a[1]=c a.propertyKey=d -árvíztűrőTÜKÖRFÚRÓGÉP=ÁRVÍZTŰRŐtükörfúrógép +árvíztűrő-TÜKÖRFÚRÓGÉP=ÁRVÍZTŰRŐ-tükörfúrógép ` func TestParseBytes(t *testing.T) { p := newParser() expectedOutput := map[string]string{ - "a": "b", - "a[1]": "c", - "a.propertyKey": "d", - "árvíztűrőTÜKÖRFÚRÓGÉP": "ÁRVÍZTŰRŐtükörfúrógép", + "a": "b", + "a[1]": "c", + "a.propertyKey": "d", + "árvíztűrő-TÜKÖRFÚRÓGÉP": "ÁRVÍZTŰRŐ-tükörfúrógép", } out := map[string]string{}