使用 Go 解析像命令行参数这样的字符串

分享于2022年07月17日 command-line-arguments go 问答
【问题标题】:使用 Go 解析像命令行参数这样的字符串(Parse strings like command line arguments with Go)
【发布时间】:2022-04-07 01:49:52
【问题描述】:

如何获取一个字符串并将其解析为一系列命令行参数?我希望能够获取一个字符串并用标志和/或 pflag 解析它。我该怎么做?

package main

import (
    "fmt"
    "os"

    flag "github.com/spf13/pflag"
)

func main() {
    command := `unimportant -fb "quoted string"`
    var (
        foo bool
        bar string
    )
    flag.BoolVarP(&foo, "foo", "f", false, "foo")
    flag.StringVarP(&bar, "bar", "b", "default", "bar")

    // Parse command
    os.Args = append(os.Args, "-fb", "quoted string")
    flag.Parse()

    fmt.Println(command)
    fmt.Println("foo", foo)
    fmt.Println("bar", bar)
}


【解决方案1】:

最简单的方法是使用包 shellwords 将您的字符串解析为shell 字的 argv ,然后使用支持解析任意@ 的 flag pflag 以外的命令行解析器987654329@(比如 flags ,但有很多可供选择。)

// Parse  your string into an []string as the shell would.

argv, err := shellwords.Parse("./foo --bar=baz")
// argv should be ["./foo", "--bar=baz"]

...

// define your options, etc. here

...

extraArgs, err := flags.ParseArgs(&opts, argv)