command-line - 命令行参数后的 Golang 标志解析

标签 command-line go

我正在解析命令行参数。我使用以下代码:

var flagB = flag.Bool("b", false, "boolflag")

func main() {
    flag.Parse()

    fmt.Println(flag.NArg())
    fmt.Println("-b", *flagB)
}

当我像这样执行二进制文件时:

> test -b "random"

我得到了预期的输出,因为有一个参数,并且设置了标志:

1
-b true

但是,当我以相反的方式执行二进制文件时:

> test "random" -b

我明白了:

2
-b false

现在,标志不再被重新编码为标志,而是另一个参数。

为什么会这样?是否有先标志后参数的定义?我一直认为传递和解析参数的“GNU 方式”是:二进制文件后的第一个位置是为强制参数保留的。之后你可以放置可选的参数和标志。

最佳答案

flag 包不使用 GNU 解析规则。规则解释in the documentation for flag the package .你的问题在那里得到了回答:

Flag parsing stops just before the first non-flag argument ("-" is a non-flag argument) or after the terminator "--".

关于command-line - 命令行参数后的 Golang 标志解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25248534/

相关文章:

linux - BASH - 找不到 xargs 命令

python - 如何从后台运行的脚本返回命令行

windows - 如何在 Windows 中使用通配符复制文件而不附加?

windows - 如何使用 ffprobe 和批处理返回视频/图像的宽度和高度

go - 在内存地址调用 func

windows - 类似于 Windows cmd "start"的 Linux/Ubuntu 命令?

go - 如何解析HTTP请求

Golang 模板 - 使用模板变量作为范围循环内的全局变量

go - En/Decode 结构包含许多具有不同实现的接口(interface),每个接口(interface)都带有 gob

go - 你如何从 Go 1.18 二进制文件中读取调试 VCS 版本信息?