|
在 E 文资料中往往会看到 argument 这个单词,这个单词有两个意思,更技术性的定义死 ”命令行上的所有 ‘文字’ “,例如:ls main.c opts.c process.c 这里,用户键入了四个 ”文字“。这 4 个文字对程序来说都是可用的,它们都会成为程序的参数。
第二个定义更通俗:参数是命令行上除了命令名以外的文字。默认情况下,Unix 下的 shell 用空白字符(空格或者 TAB 字符)将参数彼此分隔开,如果参数是引文,那么允许该参数包含空白字符:echo here are lots of spaces #shell "吃掉” 空格
here are lots of spaces echo "here are lots of spaces" #引文中的空格被保留下来
here are lots of spaces 引号对于运行中的程序来说是透明的,因而 echo 看不见双引号。
参数进一步分成选项和操作数:fgrep -f patfile foo.c bar.c baz.c 上面,
fgrep 是命令名
-f 是选项
patfile 是选项参数
foo.c bar.c baz.c 是操作数
选项是每个程序都要解释的特殊参数。选项改变程序的行为或者为程序提供信息。按照到处都遵守的旧约定:选项以短横线开始,然后后面只跟着一个字母。
选项参数是选项所需要的信息,它与常规的操作数参数相对应。
POSIX 标准钟关于程序名、选项和参数方面的约定:
程序名不应该少于 2 个字符,且不多于 9 个字符 选项名应该是单字母或单数字的字符,多数字选项应该是不允许的。 -W 选项为专指供应商而预留 对于那些不需要参数的选项来说,将多个 '-' 后面的选项聚合在一起应该是可以的(例如,'foo-a-b-c' 和 'foo-abc' 应该同样处理) 当选项确实需要参数的时候,参数与选项之间应该用空格分隔开(例如,'fgrep -f patfile' )。然而,POSIX 标准考虑到过去的实践,有时选项和操作数可以在同一个字符串中:'fgrep -fpatfile'。实际上,getopt() 和 getopt_long() 函数将 '-fpatfile' 解释称 '-f patfile' ,而不是 '-f-p-a-t...' 如果选项接受的参数有多个值,那么程序应该将参数作为一个字符串接收进来,字符串中的这些值用逗号或空白符分隔开。如:myprog -u "arnold,joe,jane" ( 以逗号分隔开 );myprog -u "arnold joe jane" (以空白字符分隔开) 选项应该在操作数之前出现在命令行上。Unix 版本的 getopt() 强迫选项遵守这个约定,GNU 版本的 getopt() 默认没有这个约定,不过你可以告诉它这么做 特殊参数 '--' 指明所有参数都结束了。命令行中后面的任何参数都被认为是操作数,即使它们以 '-' 开始 选项如何排列没有关系。然而,对于相互排斥的选项,当一个选项覆盖其他选项的设置时,那么(可以说)最后一个选项起作用。如果带参数的选项出现重复,那么程序应该按顺序处理这些选项参数。例如,'myprog -u arnold -u jane' 和 'myprog -u "arnold,jane"‘ 是相同的(你必须自己处理这些参数,getopt() 不能处理这种情况)。 允许操作数的顺序影响程序的行为。但这些程序应该用文档来说明这些情况。 读写指定文件的程序应该将单个的参数 ’-‘ 作为有意义的标准输入或标准输出来对待(或者作为一个适合于该程序的餐宿来对待)。
|
|