【发布时间】: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=FILE 与 grep -f FILE
- 让两种不同类型的参数做同样的事情的目的是什么?
- 你能用
grep --file FILE代替grep --file=FILE吗? - 对于问题 2,如果您的回答是“因为它是这样编程的”,那么我的问题是他们为什么要这样编程?有什么原因你不能使用
grep --file FILE? - 您应该遵循一些约定吗?
-
grep *-*-file中的前导-在某事中是否起重要作用?
我希望得到一个可靠的答案,这样我才能理解为什么程序员会这样做!
谢谢!
【问题讨论】:
-
最初,所有选项都是单个字母:
-a -b -c。您可以在一个字符串中组合多个选项:-abc。 GNU(?) 引入了长选项来提供更多的助记选项名称。需要不同的初始字符来区分长名称--file和单字母选项集合-file。 (我故意忽略 BSD 风格的长名称,因为这是一个非规范性的答案,只是让人了解为什么存在这两种风格)。) -
这可能不是原因,但等号允许选项及其值包含在单个字符串中,其中空格分隔多个选项:
--foo=bar --baz arg可以区分--foo选项与参数bar,选项--baz,以及不相关的位置参数arg。
标签: linux command-line command-line-arguments