【问题标题】:Shell Expansion (Command substitution) in GolangGolang 中的 Shell 扩展(命令替换)
【发布时间】:2018-08-06 15:41:29
【问题描述】:
Go 支持变量扩展,例如:
os.ExpandEnv("test-${USER}")`
>>“测试我的名字”
但是有没有办法扩展 可执行文件,就像 shell 的行为方式一样?
有点像
os.ExpandExecutable("test-$(date +%H:%M)")
>>“测试-18:20”
我找不到等效的方法,有没有一种优雅的方法来代替手动提取占位符,执行然后替换它们?
【问题讨论】:
标签:
shell
go
command-substitution
【解决方案1】:
对此没有内置函数,但您可以编写一个函数并将其传递给os.Expand()。
package main
import (
"fmt"
"os"
"os/exec"
"strings"
)
func RunProgram(program string) string {
a := strings.Split(program, " ")
out, err := exec.Command(a[0], a[1:]...).Output()
if err != nil {
panic(err)
}
return string(out)
}
// 然后你称它为:
func main() {
s := os.Expand("test-${date +%H:%M}", RunProgram)
fmt.Print(s)
}
这个输出:
test-13:09
注意os.Expand() 需要花括号,即${command args args args}。