Shell Golang 中的扩展(命令替换)

Shell Expansion (Command substitution) in Golang

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}