本文共 1809 字,大约阅读时间需要 6 分钟。
Linux 遵循一种统一的命令行格式,通常有两种表达方式:短格式 vs 长格式。短格式是由一个"-"加上字符组成,如 -h、-v、-l filepath等等。而长格式是由两个"-"加一个单词组成,如 --help、--version、--load filepath等等。 ◇ POSIX标准中关于程序名、参数的约定 ◇ 程序名不宜少于2个字符且不多于9个字符。 程序名应只包含小写字母和阿拉伯数字。 选项名应该是单字符或单数字,且以短横 "-" 为前綴。 多个不需要选项参数的选项,可以合并,如 foo -a -b -c 等价于 foo -abc。 选项与其参数之间用空白符隔开。 选项参数不可选。 若选项参数有多值,要将其并为一个字串传进来,如 myprog -u "arnold joe jane"。 选项应该在操作数出现之前出现。 特殊参数 "--" 指明所有参数都结束了,其后任何参数都认为是操作数。 选项如何排列没什么关系。对互斥选项,若操作结果有覆盖关系,则最后一个选项起作用。 允许操作数的顺序影响程序行为,但需要作文档说明。 读写指定文件的程序应该将单个参数'-'作为有意义的标准输入或输出来对待。 ◇ GNU长选项约定 ◇ 对于已经遵循POSIX约定的GNU程序,每个短选项都有一个对应的长选项。 额外针对GNU的长选项不需要对应的短选项,仅仅推荐要有。 长选项可以缩写成保持惟一性的最短的字串。 选项参数与长选项之间或通过空白字符活通过一个'='来分隔。 选项参数是可选的(只对短选项有效)。 长选项允许以一个短横线为前缀。 ☆ file one.c ☆ // code example __one__ // by linpeitian // mar 23 2007 @ linux # include <stdio.h> # include <getopt.h> int main(int argc, char *argv[]) { int opt; // 短命令格式 while ((opt = getopt(argc, argv, "hl:v")) != -1) { switch(opt) { case 'h': printf("choice - - > help\n"); break; case 'l': printf("choice - - > load %s\n", optarg); break; case 'v': printf("choice - - > versioin\n"); break; case '?': printf("unknown choice\n"); break; } } return 0; } ☆ file two.c ☆ // code example __two__ // by linpeitian // mar 23 2007 @ linux # include <stdio.h> # include <getopt.h> int main(int argc, char *argv[]) { int opt; // 短命令格式 const char *shortopts = "hl:v"; // 长命令格式 const struct option longopts[] = { {"help", 0, NULL, 'h'}, {"load", 1, NULL, 'l'}, {"version", 0, NULL, 'v'}, {NULL, 0, NULL, 0} }; while((opt = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1) { switch(opt) { case 'h': printf("choice - - > help\n"); break; case 'v': printf("choice - - > version\n"); break; case 'l': printf("choice - - > load %s\n", optarg); break; case '?': // 未知命令参数 printf("unknown choice\n"); break; default: break; } } return 0; }转载地址:http://tchab.baihongyu.com/