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

3

Go支持变量扩展,例如:

os.ExpandEnv("test-${USER}")`

>> "test-MyName"

但是是否有一种扩展可执行文件的方法,就像shell的行为一样?

类似于

os.ExpandExecutable("test-$(date +%H:%M)")

>> "test-18:20"

我找不到一个等效的方法,是否有一种优雅的方法来代替手动提取占位符、执行然后替换它们的方式?

1个回答

3

虽然没有内置函数能够实现这个功能,但是你可以编写一个函数并将它传递给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}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接