Go支持变量扩展,例如:
os.ExpandEnv("test-${USER}")`
>> "test-MyName"
但是是否有一种扩展可执行文件的方法,就像shell的行为一样?
类似于
os.ExpandExecutable("test-$(date +%H:%M)")
>> "test-18:20"
我找不到一个等效的方法,是否有一种优雅的方法来代替手动提取占位符、执行然后替换它们的方式?
Go支持变量扩展,例如:
os.ExpandEnv("test-${USER}")`
>> "test-MyName"
但是是否有一种扩展可执行文件的方法,就像shell的行为一样?
类似于
os.ExpandExecutable("test-$(date +%H:%M)")
>> "test-18:20"
我找不到一个等效的方法,是否有一种优雅的方法来代替手动提取占位符、执行然后替换它们的方式?
虽然没有内置函数能够实现这个功能,但是你可以编写一个函数并将它传递给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}
。