I have an input string for my Golang CLI tool with some references to environment variables in bash syntax ($VAR
and ${VAR}
), e.g.:
$HOME/somedir/${SOME_VARIABLE}dir/anotherdir-${ANOTHER_VARIABLE}
What is the most efficient way to interpolate this string by replacing environemnt variables references with actual values? For previous example it can be:
/home/user/somedir/4dir/anotherdir-5
if HOME=/home/user
, SOME_VARIABLE=4
and ANOTHER_VARIABLE=5
.
Right now I'm using something like:
func interpolate(str string) string {
for _, e := range os.Environ() {
parts := strings.SplitN(e, "=", 2)
name, value := parts[0], parts[1]
str = strings.Replace(str, "$" + name, value, -1)
}
return str
}
but this code doesn't handle ${}
variables.