`-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
.)
来自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
.)