程序开发 · 2023年11月15日

使用类似 bash 的环境变量引用插入字符串

当前位置: > > > > 使用类似 bash 的环境变量引用插入字符串

来源:stackoverflow
2024-04-22 15:27:35
0浏览
收藏

一分耕耘,一分收获!既然都打开这篇《使用类似 bash 的环境变量引用插入字符串》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

我的 golang cli 工具有一个输入字符串,其中包含一些对 bash 语法中的环境变量的引用($var${var}),例如:

$home/somedir/${some_variable}dir/anotherdir-${another_variable}

通过用实际值替换环境变量引用来插入该字符串的最有效方法是什么? 对于前面的示例,它可以是:

/home/user/somedir/4dir/anotherdir-5

如果 home=/home/usersome_variable=4another_variable=5

现在我正在使用类似的东西:

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
}

但此代码不处理 ${} 变量。

解决方案

使用:

s := os.expandenv(
    "$home/somedir/${some_variable}dir/anotherdir-${another_variable}")

如果值不是从环境变量中获取,则可以使用 :

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] })

以上就是《使用类似 bash 的环境变量引用插入字符串》的详细内容,更多关于的资料请关注公众号!