There are several different patterns for options that have been used historically in UNIX applications. Several old ones, like tar, use a positional scheme:
command options arguments
as for example tar uses
tar *something*f "file operated on" *"paths of files to manipulate"*
In a first attempt to avoid the confusion, tar and a few other programs with the old flags-arguments style allowed delimiting the flags with dashes, but most of us old guys simply ignored that.
Some other commands have a more complicated command line syntax, like dd(1) which uses flags, equal signs, pathnames, arguments and a partridge in a pear tree, all with wild abandon.
In BSD and later versions of unix, this had more or less converged to single-character flags marked with '-', but this began to present a couple of problems:
- the flags could be hard to remember
- sometimes you actually wanted to use a name with '-'
- and especially with GNU tools, there began to be limitations imposed by the number of possible flags. So GNU tools added GNU long options like
Then Sun decided that the extra '-' was redundant and started using long-style flags with single '-'s.
And that's how it came to be the mess it is now.