History
Unix' style of command line handling is clearly inherited from GE's Multics, as much as its name is a play on Multics. This incudes the hyphen (-
) as token. In Multics it was called a Control Argument. Multics itself may have inherited it from DEC's TOPS-10, or more exactly the PDP-6 Monitor program as it originally was called.
The popularity of Multics at universities, together with many DEC installations at such places, can be seen as the major influence in next to all later systems.
Data General's RDOS/AOS, in itself a child of DEC-trained people (and DEC's RSX-11 as direct competition) might have been the first to use a slash (/
) as token.
(I still think the Multics path separator looks more natural >etc>bin
- too bad Unix diverted here.)
Comparison with Mainframes
Next to all modern mini- / micro-computer OS commandlines use spaces as separators between arguments and a dedicated token to indicate parameter names, which can stand for themselves (switches) i.e. have no value assigned.
Example: command arg1 arg2 -name1 val -name2
In contrast, mainframe cli/script environments are based around comma (,
)-separated arguments where parameter names are separated by an equal/assignment (=
) sign from their value. Empty values usually revert to the same default as if not present, therefore what's a lone switch elsewhere must here be accompanied by a (legal) value to enable the option.
Example: command arg1,arg2,name1=val,name2=yes
The mainframe style has some advantages due to less ambiguity, but is often considered bloated. Technically that' not true - it's rather that mainframe command designers love to have nice readable names, so it does get lengthy ... then again, GNU-style parameter lists can easily spread over multiple lines.
-
and/
to introduce command line switches, and can be configured either way. (Many third-party tools only work with/
though so it’s not that useful in practice.)