为什么有些Linux程序指定长格式和速记参数?

为什么有些Linux程序指定长格式和速记参数?,linux,command-line,command-line-arguments,Linux,Command Line,Command Line Arguments,每当我浏览文档和手册页时,我注意到大多数linux程序都有两种类型的参数,这是我真正感兴趣的发现 其中一个似乎是完整的参数名(长格式) 其中一个似乎是速记 以grep为例。如果我运行grep--help免责声明:这不是一个关于grep的问题。我在许多其他工具中都看到了这一点 Regexp selection and interpretation: -E, --extended-regexp PATTERN is an extended regular expression -

每当我浏览文档和手册页时,我注意到大多数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
我们可以看到有两种类型的参数。一个缩写和完整的参数名

另一件需要注意的事情是,如果您指定这些参数的简写形式,则它们之间用空格分隔,但是当使用完整参数时,它似乎用
=
符号分隔。e、 g:
grep--file=file
vs
grep-f file

  • 有两种不同类型的参数做同一件事的目的是什么
  • 您是否能够使用
    grep--file file
    而不是
    grep--file=file
  • 对于问题2,如果你的答案是“因为这就是编程的方式”,那么我的问题是他们为什么要这样编程?有什么原因不能使用grep--file文件吗
  • 有什么你应该遵守的惯例吗
  • grep*-*-文件中的前导
    -
    在某些事情中起着重要作用吗
  • 我希望能有一个可靠的答案,这样我就可以理解程序员为什么这样做


    谢谢

    我想有多种原因:

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

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

    除了其他答案,长选项和短选项由&(来自GLibc)处理,也由其他几个选项处理功能(例如,在Qt或GTK中)处理

    还有
    --help
    --version

    一些(很少有用的)命令选项只有很长的形式(例如GNU
    ls的
    --time style


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

    最初,所有选项都是单个字母:
    -a-b-c
    。您可以在单个字符串中组合多个选项:
    -abc
    。GNU(?)引入了长选项以提供更多助记选项名称。需要使用不同的初始字符来区分长名称
    --file
    和单个字母选项的集合
    -file
    。(我故意忽略BSD样式的长名称,因为这是一个非规范性的回答,只是让人感觉到这两种样式存在的原因。)这可能不是原因,但是等号允许一个选项及其值包含在单个字符串中,其中空格分隔多个选项:
    --foo=bar--baz arg
    可以区分带参数的
    --foo
    选项
    bar
    ,选项
    --baz
    ,和不相关的位置参数
    arg
    。进一步查看您的答案-以及GNU编码标准链接,它似乎是一个需要遵循的惯例-感谢您的答案!