【问题标题】:Why do some Linux programs specify long form and shorthand arguments? [closed]为什么有些 Linux 程序指定长格式和速记参数? [关闭]
【发布时间】:2013-05-16 14:02:36
【问题描述】:

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

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

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=FILEgrep -f FILE

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

我希望得到一个可靠的答案,这样我才能理解为什么程序员会这样做!

谢谢!

【问题讨论】:

  • 最初,所有选项都是单个字母:-a -b -c。您可以在一个字符串中组合多个选项:-abc。 GNU(?) 引入了长选项来提供更多的助记选项名称。需要不同的初始字符来区分长名称--file 和单字母选项集合-file。 (我故意忽略 BSD 风格的长名称,因为这是一个非规范性的答案,只是让人了解为什么存在这两种风格)。)
  • 这可能不是原因,但等号允许选项及其值包含在单个字符串中,其中空格分隔多个选项:--foo=bar --baz arg 可以区分 --foo 选项与参数bar,选项--baz,以及不相关的位置参数arg

标签: linux command-line command-line-arguments


【解决方案1】:

我想有多种原因:

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

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

【讨论】:

    【解决方案2】:

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

    还有GNU coding standards 推荐他们,还有--help--version

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

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

    【讨论】:

    猜你喜欢
    • 2020-03-31
    • 1970-01-01
    • 2014-12-04
    • 2014-11-10
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    相关资源
    最近更新 更多