为什么有些Linux程序指定长格式和速记参数?
每当我浏览文档和手册页时,我注意到大多数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 -
- 其中一个似乎是完整的参数名(长格式)
- 其中一个似乎是速记
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
vsgrep-f file
grep--file file
而不是grep--file=file
grep*-*-文件中的前导-
在某些事情中起着重要作用吗
谢谢 我想有多种原因:
这是我使用各种操作系统和命令行20多年后的观点。除了其他答案,长选项和短选项由&(来自GLibc)处理,也由其他几个选项处理功能(例如,在Qt或GTK中)处理 还有
--help
和--version
一些(很少有用的)命令选项只有很长的形式(例如GNUls的--time style
)
顺便说一句,如果您为Linux编写了一些命令行软件,这些软件要么是免费软件,要么将被分发(可能出售),请接受--help
选项:它正在成为一种非常常见的惯例。我讨厌少数几个不遵循它的程序 最初,所有选项都是单个字母:-a-b-c
。您可以在单个字符串中组合多个选项:-abc
。GNU(?)引入了长选项以提供更多助记选项名称。需要使用不同的初始字符来区分长名称--file
和单个字母选项的集合-file
。(我故意忽略BSD样式的长名称,因为这是一个非规范性的回答,只是让人感觉到这两种样式存在的原因。)这可能不是原因,但是等号允许一个选项及其值包含在单个字符串中,其中空格分隔多个选项:--foo=bar--baz arg
可以区分带参数的--foo
选项bar
,选项--baz
,和不相关的位置参数arg
。进一步查看您的答案-以及GNU编码标准链接,它似乎是一个需要遵循的惯例-感谢您的答案!