On Sep 7, 2011, at 12:30 PM, Wichmann, Mats D wrote: > > > On Wed, Sep 7, 2011 at 9:16 AM, Jeff Johnson <n3...@mac.com> wrote: > > On Sep 7, 2011, at 4:44 AM, Christian Schmidt wrote: > > > Hi, > > > > I'm trying to parse a command line that can contain multiple variable > > number of arguments for a parameter, e.g. > > > > <program> -r /dev/sda /dev/sdb -m /dev/sdc /dev/sdd -b 16m … > > > > Traditionally, uglix was designed with the model > PROGRAM OPTIONS ARGUMENTS > and that is captured in strict POSIX (and still common on *BSD systems iirc). > > The default option processing enhances --options=arg to take the "next" > item, and there is the "=" that has been added to introduce some form > of "stickiness". > > What you are seeking with multiple arguments to a single option > (and I understand well why you are attempting) isn't well supported > anywhere afaik. The usual solution is to embed white space within > quotes like > > <program> -r "/dev/sda /dev/sdb" -m "/dev/sdc /dev/sdd" -b 16m > > > there's some precedent (not a lot) for using a separator other than space > for this purpose, often a comma since it happens to be neutral to the > shell. as in: > > --optionlist=foo,bar,baz >
Yup. A comma separated list is actually what POPT uses for its Bloom filter implementation, where a series of comma separated strings are parsed as keys into a set container for arbitrary opaque strings that can be used/testsed through a set membership mechanism. Implemented here #define POPT_ARG_BITSET 16U+14U /*!< arg ==> bit set * where arg is a comma separated set of strings. There really isn't any guidance on a "standard" compliant solution. Unless POSIX is mandating ',' as a separator somehow … which would be truly daft *insanity* imho ;-) > > if you use space, semicolon, etc. you do need to quote it. > And these are shell, not POPT, uglix derived restrictions of course. 73 de Jeff