0

每当我浏览文档和手册页时,我注意到大多数 linux 程序都有两种类型的参数,这是我真正感兴趣的发现......

  • 一个似乎是完整的参数名称(长格式)。
  • 一个似乎是一种速记。

举个grep例子。如果我运行grep --help 免责声明:这不是一个grep特别的问题。我已经在许多其他工具中看到了这一点。

Regexp selection and interpretation:
  -E, --extended-regexp     PATTERN is an extended regular expression
  -F, --fixed-strings       PATTERN is a set of newline-separated strings
  -G, --basic-regexp        PATTERN is a basic regular expression
  -P, --perl-regexp         PATTERN is a Perl regular expression
  -e, --regexp=PATTERN      use PATTERN as a regular expression
  -f, --file=FILE           obtain PATTERN from FILE
  -i, --ignore-case         ignore case distinctions
  -w, --word-regexp         force PATTERN to match only whole words
  -x, --line-regexp         force PATTERN to match only whole lines
  -z, --null-data           a data line ends in 0 byte, not newline

可以看出有两种类型的论点。简写和完整的参数名称。

另外需要注意的是,如果你指定这些参数的简写,它们之间用空格隔开,但是当使用完整的参数时,它似乎是用=符号隔开的。例如:grep --file=FILEvsgrep -f FILE

  1. 有两种不同类型的参数做同样的事情的目的是什么?
  2. 你能用grep --file FILE代替grep --file=FILE吗?
  3. 对于问题 2,如果您的答案是“因为这就是它的编程方式”,那么我的问题是他们为什么要这样编程?有什么原因你不能使用grep --file FILE吗?
  4. 您应该遵循一些约定吗?
  5. 领先-grep *-*-file某事中是否起重要作用?

我很感激对此有一个可靠的答案,所以我可以理解为什么程序员会这样做!

谢谢!

4

2 回答 2

1

我想有多种原因:

  1. 系统限制:由于早期系统的内存大小有限,您必须减少使用的字符
  2. 兼容性:出于兼容性原因,在以后的版本中保留了简写
  3. 懒惰:程序员和在命令行上工作的人不喜欢打字太多
  4. 脚本的可读性:当您不想在代码和手册页之间切换以找出五个、六个或更多选项的列表时,长版本非常适合脚本的可读性

这是我在使用各种操作系统和命令行 20 多年后的个人观点。

于 2013-05-21T17:51:48.710 回答
1

除了其他答案之外,多头和空头选项由argpgetopt_long(来自 GLibc)以及其他几个选项处理函数(例如在 Qt 或 GTK 中)处理。

并且GNU 编码标准推荐了它们,--help还有--version.

一些(很少有用的)命令选项只有一个长格式(例如--time-style对于 GNU ls)。

顺便说一句,如果您为 Linux 编写了一些命令行软件,这些软件要么是免费软件,要么将被分发(可能已出售),请接受这个--help选项:它正在成为一种非常普遍的约定。我讨厌几个不遵循它的程序!

于 2013-05-21T19:00:01.360 回答