登录
首页 >  Golang >  Go问答

将现有值与 go 环境变量合并

来源:stackoverflow

时间:2024-02-11 13:51:24 475浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《将现有值与 go 环境变量合并》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

问题内容

如何将另一个值附加到 go 环境变量的现有值?

如果cgo_cxxflags的值为“-i/blah/blah”

由于以下内容不起作用

$ go env -w cgo_cxxflags="$cgo_cxxflags -i/foo/bar"

我想找到一种正确的方法来cgo_cxxflags具有值“-i/blah/blah -i/foo/bar”

避免简单地重新设置所有值加上新值,例如:

$ go env -w CGO_CXXFLAGS="-I/blah/blah -I/foo/bar"

正确答案


由于 go env <var_name> outputs the effective setting of the variable(即不一定是默认值),获取环境变量当前默认值的可靠方法是使用 a subshell(假设是 bash shell):

$ (unset <var_name>; go env <var_name>)

然后,要设置一个新值,您需要使用 command substitution

$ go env -w <var_name>="$(unset <var_name>; go env <var_name>)<value_to_append>"

请参阅以下带注释的日志以获取工作示例:

# write an initial default.
$ go env -w cgo_cxxflags=-i/blah/blah

$ go env cgo_cxxflags
-i/blah/blah

# keep in mind that the default can be overridden by a currently set 
# environment variable.
$ export cgo_cxxflags="-i/override/default"

$ go env cgo_cxxflags
-i/override/default

# to print the default value even when it is being overridden,
# in a subshell, unset the environment variable and then run 'go env'. 
$ (unset cgo_cxxflags; go env cgo_cxxflags)
-i/blah/blah

# to set a new default value utilizing the existing default value.
#
# note: if the default isn't being overridden, no warning will be printed.
$ go env -w cgo_cxxflags="$(unset cgo_cxxflags; go env cgo_cxxflags) -i/foo/bar"
warning: go env -w cgo_cxxflags=... does not override conflicting os environment variable

# state after change...
# default value
$ (unset cgo_cxxflags; go env cgo_cxxflags)
-i/blah/blah -i/foo/bar

# overridden value
$ go env cgo_cxxflags
-i/override/default

或者,您可以找到具有默认值的文件并直接解析它(go env goenv会告诉您文件位置),但我认为暂时取消设置环境变量并让go env完成工作会更容易。 p>

powershell 中的等效项:

# Write default.
PS > go env -w CGO_CXXFLAGS=-I/blah/blah
PS > go env CGO_CXXFLAGS
-I/blah/blah

# Override default.
PS > $Env:CGO_CXXFLAGS = "-I/override/default"
PS > go env CGO_CXXFLAGS
-I/override/default

# Print default.
PS > Start-Job {$Env:CGO_CXXFLAGS=''; go env CGO_CXXFLAGS} | Receive-Job -Wait
-I/blah/blah

# Append to default.
PS > go env -w CGO_CXXFLAGS="$(Start-Job {$Env:CGO_CXXFLAGS=''; go env CGO_CXXFLAGS} | Receive-Job -Wait) -I/foo/bar"
warning: go env -w CGO_CXXFLAGS=... does not override conflicting OS environment variable

# Final state.
PS > go env CGO_CXXFLAGS
-I/override/default

PS > Start-Job {$Env:CGO_CXXFLAGS=''; go env CGO_CXXFLAGS} | Receive-Job -Wait
-I/blah/blah -I/foo/bar

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《将现有值与 go 环境变量合并》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>