N
Nobody
I think it is clear, at this late date, that the so-called "MSDOS" way
of doing it is best, *provided* that the implementation provides a
standard library call to do the parsing that, in the Unix way, the shell
normally does for you. And makes it damn clear that every app should
invoke this function unless it has a damn good reason not to (something
like 'find' being a good example of a valid exception).
Then, every program which invokes another program has to escape or quote
any arguments which may be affected by the parsing which is built into
each program (at least, the ones which follow the edict).
With Unix, one of the first rules to be impressed on novice programmers is
to avoid system() like the plague, and use fork+exec* directly, so that
you aren't fighting the shell. Of course, that would be somewhat harder if
the "shell" was built into every program.
I see the "Unix way" (of handling the command line) as an attempt to
"standardize without standardizing" - that is, to nip the problem in the
bud, without requiring explicit/heavy-handed edicts that might be seen as
crimping fragile developer egos.
I see the Unix way as simply providing the most convenient interface.
Programs don't have to do any magic with their arguments, and invoking a
program doesn't have to undo said magic. Users who want the convenience of
all kinds of shorthands can use the shell of their choice.
The minor inconvenience of having to quote patterns for e.g. find isn't
worth the problems (e.g. the fact that any program invoking find needs to
know that it's invoking find and that it shouldn't be protecting arguments
against parsing).
Implicit in the above is the fact that neither Unix nor DOS/Windows
ever had the concept of "application developer discipline" (a term I
just made up). Developers were always encouraged to "go their own way",
to "live free" and to "follow their dreams". Contrast this with the Mac
way, where there were always clear guidelines (from Apple) telling you
how to do each little thing (and that you deviated at your peril).
On the contrary, Unix has a very strong sense of convention, particularly
"do what you're told". Command-line arguments are commonly passed directly
to API functions without modification or interpretation. This approach is
essential if you want to construct complex scripts; otherwise, as the
script becomes more complex, the probability that any particular value
will end up triggering some undesired "automagic" behaviour approaches
unity.