我想在Go中运行以下代码:
out, err := exec.Command("echo", "$PATH").Output()
Run Code Online (Sandbox Code Playgroud)
结果是:
$PATH
Run Code Online (Sandbox Code Playgroud)
而不是"PATH =/bin ..."的预期值.
为什么?我怎样才能获得预期的价值?
shell不会解释您的命令,这就是未发生预期变量替换的原因.
从exec包文档:
... os/exec包故意不会调用系统shell,也不会扩展任何glob模式或处理通常由shell完成的其他扩展,管道或重定向.
...
要扩展环境变量,请使用package os的ExpandEnv.
因此,要在您的示例中实现所需的结果:
out, err := exec.Command("echo", os.ExpandEnv("$PATH")).Output()
Run Code Online (Sandbox Code Playgroud)
值得回顾一下获取环境变量的函数集,并使用最适合您特定用例的函数:
func ExpandEnv(s string) string - ExpandEnv根据当前环境变量的值替换字符串中的$ {var}或$ var.对未定义变量的引用将替换为空字符串.func Getenv(key string) string - Getenv检索由键命名的环境变量的值.它返回值,如果变量不存在,该值将为空.要区分空值和未设置值,请使用LookupEnv.func LookupEnv(key string) (string, bool) - LookupEnv检索由键命名的环境变量的值.如果变量存在于环境中,则返回值(可能为空)并且布尔值为true.否则返回的值将为空,布尔值将为false.从Go 示例:环境变量 中,您可以尝试(而不是系统命令echo)使用os.Getenv:
fmt.Println("PATH:", os.Getenv("PATH"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1473 次 |
| 最近记录: |