【问题标题】: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}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      相关资源
      最近更新 更多