Kir*_*ill 3 environment-variables go string-interpolation
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}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
but this code doesn't handle ${} variables.
使用os.ExpandEnv:
s := os.ExpandEnv(
"$HOME/somedir/${SOME_VARIABLE}dir/anotherdir-${ANOTHER_VARIABLE}")
Run Code Online (Sandbox Code Playgroud)
对于不从环境变量获取值的情况,可以使用os.Expand:
m := map[string]string{
"HOME": "/home/user",
"SOME_VARIABLE": "4",
"ANOTHER_VARIABLE": "5",
}
s := os.Expand(
"$HOME/somedir/${SOME_VARIABLE}dir/anotherdir-${ANOTHER_VARIABLE}",
func(s string) string { return m[s] })
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |