我有一个可以被称为
的Perl脚本perl mysrc.pl -a=3 -b=4 -c=6
或
perl mysrc.pl -t=15
基本上,(要么提供t
的值)OR(提供所有a
,b
和c
)的值。至少必须指定其中一组值。
如何在语法中说出上述内容?
perl mysrc.pl
[-a=<value of a>]
[-b=<value of b>]
[-c=<value of c>]
[-t=<value of t>]
意味着所有参数都是可选的,但情况并非如此。编写mysrc.pl
的语法的正确方法是什么?
答案 0 :(得分:4)
两个选项:使用“|”作为“OR”符号和非方括号进行分组以避免“可选”上下文,或列出多行竞争用法
perl mysrc.pl {-a=<value of a> -b=<value of b> -c=<value of c>|-t=<value of t>}
perl mysrc.pl UseCaseOneOptions|UseCaseTwoOptions
UseCaseOneOptions: -a=<value of a> -b=<value of b> -c=<value of c>
UseCaseTwoOptions: -t=<value of t>
对于非常复杂的选项集(想想CVS),做CVS做的事情(目前没有xterm,所以下面是内存的粗略近似) - 也就是说,通用“帮助”消息只列出所有可能的用例,并获得有关每个用例的选项集的帮助,您可以发出每用例帮助命令。
$ cvs --help
Usage: cvs <command> <per-command-options>
Please type "cvs command --help" to get help on specific command's options
Commands are:
cvs add
cvs commmit
cvs remove
...
$ cvs checkout --help
Usage: cvs checkout [-p] [-A] [-m message] [-M message_file] file_path
-m message: check-in comment
-M file: read check-in comment from this file
-p: non-sticky checkout. Print the file to STDOUT.
$ cvs diff --help
Usage: cvs diff [-r VER1] [-r VER2] [-w] file_path
-w: Ignore whitespace
答案 1 :(得分:3)
我可能会使用:
mycmd [ -t=tval | -a=aval -b=bval -c=cval ] ...
其中'...'表示任何其他选项,或文件名,或根本没有。如果一个或另一个集是强制性的,我可以使用大括号“{}
”而不是方括号“[]
”。方括号通常表示“可选”。
答案 2 :(得分:1)
你的意思是帮助文字?在这种情况下,您可以执行Subversion所做的事情,例如:
$ svn help merge
merge: Apply the differences between two sources to a working copy path.
usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]
3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]