- Notifications
You must be signed in to change notification settings - Fork 484
CommandLine Grammar
CommandLineParser Apply GNU stndard in using - or -- as a prefix for options (vs forward slash).
There are two kinds of arguments: Named options and Unbound values:
They are: ShorName and LongName.
- ShortName begin with a hyphen delimiter ('-').
- Multiple options may follow a hyphen delimiter in a single token if the options do not take arguments (switches or boolean options), i.e they can be merged together. Thus,
-abcis equivalent to-a -b -c. - Option names are single alphanumeric characters, e.g
-a. - An option and its argument value may or may not appear as separate tokens. (In other words, the whitespace separating them is optional.) Thus,
-o fooand-ofooare equivalent.
Short options can be grouped, so that:
# this is valid (omitting space between short options) $ myapp -vf my.file # and also this (omitting space between short option and its value) $ myapp -vfmy.fileFor options: a, b, c, d, e as boolean options and the f as scalar string option:
# this is a valid syntax: $ myapp -abcdef my.file # note: that f is the last option This is not allowed?
$ myapp -fv my.file # f is scaler option and should be the last, i.e -vf myfile.txt- The LongName begin with two dashes, e.g.,
--list. - The long names are more clear than their corresponding short names.
- Long options are meant to be obvious and easy to remember, and their meanings are generally easier to discern than those of their corresponding short options.
- LongName can be merged with its value using
=separator. Thus,--blocking-factor=20and--blocking-factor 20are equivalent.
For example:
$ myapp --create --verbose --blocking-factor=20 - The argument
--terminates all options; any following arguments are treated as non-option arguments, even if they begin with a hyphen. Parser can be configured to accept--as option terminator
Notes:
A token consisting of a single hyphen character
-is interpreted as an ordinary non-option argument. By convention, it is used to specify input from or output to the standard input and output streams (it's allowed in v2.9).Options may be supplied in any order, or appear multiple times. The interpretation is left up to the Option Class.
- They are named Unbound Values.
- Value options are positional arguments and indexed starting 0.
- They don't begin with
- or --. - Arguments that are precedded by
--terminator are treated as values even they begin with- or --.
Named Options are classified to thre types: switches, scalars and sequence options.
- Switch option is a boolean type.
- It's
falseby default. - If it's passed in the commandline, it will be
true. - Switch can be
Nullable<bool>, and it can be in three state value:true/ false / null.
// CheckIn = true by default[Option]publicboolCheckIn{get;set;}Nullable bool
//set default =true [Option(Default=(bool)true)]publicbool?Visible{get;set;}Commandline arguments:
$ myapp --visible false # Visible =false $ myapp --visible true # Visible =true $ myapp # drop --visible from commandline => Visible =true (default value) - Scalar options require one and only one argument value.
- Example:
-a 123
[Option("device-name")]publicstringDeviceName{get;set;}//scalarCommandline arguments:
$ myApp --device-name "primary device" - Sequence options require one or more argument value.
- its type is:
IEnumerable<T> - Option name may be repeated more than one time.
- Thus
--files file1.txt file2.txtand--files file1.txt --files file2.txtare equivalant.
[Option]publicIEnumerable<string>Files{get;set;}//sequence$ myapp --files file1.txt file2.txt #or $ myapp --files file1.txt --files file2.txt # v2.9+ Commandline arguments:
classOptions{[Option("visible")]publicboolVisible{get;set;}//switch[Option("device-name")]publicstringDeviceName{get;set;}//scalar[Option]publicIEnumerable<string>Files{get;set;}//sequence}