github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/executil/env_var.go (about) 1 package executil 2 3 import ( 4 "os" 5 "regexp" 6 "strings" 7 8 "github.com/sirupsen/logrus" 9 ) 10 11 var reEnvVar = regexp.MustCompile("(\\$?\\$)\\{?([A-Z0-9_]+)\\}?") 12 13 type EnvVars map[string]string 14 15 func (envVars EnvVars) AddEnvVar(key, value string) { 16 envVars[key] = value 17 } 18 19 func (envVars EnvVars) LoadFromEnviron() { 20 for _, keyPair := range os.Environ() { 21 keyValue := strings.Split(keyPair, "=") 22 envVars.AddEnvVar(keyValue[0], keyValue[1]) 23 } 24 } 25 26 func (envVars EnvVars) Parse(s string) string { 27 result := reEnvVar.ReplaceAllStringFunc(s, func(str string) string { 28 matched := reEnvVar.FindAllStringSubmatch(str, -1)[0] 29 30 // skip $${ } 31 if matched[1] == "$$" { 32 return "${" + matched[2] + "}" 33 } 34 35 if value, ok := envVars[matched[2]]; ok { 36 return value 37 } 38 39 logrus.Errorf("Missing environment variable ${%s}", matched[2]) 40 return "${" + matched[2] + "}" 41 }) 42 43 return result 44 }