`-V` 标志如何既是 `--verbose` 又是 `--version`?

How can the `-V` flag be both `--verbose` and `--version`?

来自https://github.com/karelzak/util-linux/blob/master/disk-utils/mkfs.c#L94-L113

/* Check commandline options. */
opterr = 0;
while ((more == 0)
       && ((i = getopt_long(argc, argv, "Vt:h", longopts, NULL))
       != -1))
    switch (i) {
    case 'V':
        verbose++;
        break;
    case 't':
        fstype = optarg;
        break;
    case 'h':
        usage();
    case VERSION_OPTION:
        print_version();
    default:
        optind--;
        more = 1;
        break;  /* start of specific arguments */

mkfs 的文档说 -V 是版本和详细信息的短标记。我无法理解这是怎么可能的,我正在寻求清晰度。

VERSION_OPTION 定义为 enum { VERSION_OPTION = CHAR_MAX + 1 }; 所以我不确定那是什么字符。

查几行。在调用 getopt_long 之前:

    if (argc == 2 && !strcmp(argv[1], "-V"))
            print_version();

对于值为 -V 的单个参数,代码有一个特殊情况,正常选项处理代码未处理。如果有多个参数,它将通过 if 并处理 -V 作为 verbose 标志。

这样做的一个效果是

mkfs -V -V

打印一条错误消息:

mkfs: no device specified
Try 'mkfs --help' for more information.

这在(某些版本的)手册页中也有说明:

-V, --version

Display version information and exit. (Option -V will display version information only when it is the only parameter, otherwise it will work as --verbose.)