来自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 };
所以我不确定是什么字符。
答案 0 :(得分:9)
查看几行。在致电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
强>显示版本信息并退出。 (选项
-V
仅在唯一参数时显示版本信息,否则将以--verbose
的形式显示。)