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

时间:2018-02-27 04:22:53

标签: shell go command-substitution

Go支持变量扩展,例如:

  

os.ExpandEnv( “测试 - $ {USER} ”)`

     

>> “测试MYNAME”

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

这样的东西
  

os.ExpandExecutable(“test- $(日期+%H:%M)”)

     

>> “测试-18:20”

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

1 个答案:

答案 0 :(得分:2)

此处没有内置函数,但您可以编写函数并将其传递给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}