Just being nit-picky here, but the character - is technically called a hyphen. We use the word "dash" to refer to the em dash (—) in most cases, and sometimes the en dash (–), but neither of which is a hyphen (-).
–
chharveyJun 20 at 16:20

4 Answers
4

In the original Unix tradition, command-line options are single letters preceded by a single hyphen... The original Unix style evolved on slow ASR-33 teletypes that made terseness a virtue; thus the single-letter options. Holding down the shift key required actual effort; thus the preference for lower case, and the use of “-” (rather than the perhaps more logical “+”) to enable options.

The GNU style uses option keywords (rather than keyword letters) preceded by two hyphens. It evolved years later when some of the rather elaborate GNU utilities began to run out of single-letter option keys (this constituted a patch for the symptom, not a cure for the underlying disease). It remains popular because GNU options are easier to read than the alphabet soup of older styles. 1

One reason for continuing to use the single letter options is because they can be strung together: ls -ltr is a lot easier to type than ls --sort=time --reverse --format=long. There are a number of times when both are good to use. As for searching for this topic, try "unix command line options convention".

In Unix-like systems, the ASCII hyphen–minus is commonly used to
specify options. The character is usually followed by one or more
letters. An argument that is a single hyphen–minus by itself without
any letters usually specifies that a program should handle data coming
from the standard input or send data to the standard output. Two
hyphen–minus characters ( -- ) are used on some programs to specify
"long options" where more descriptive option names are used. This is a
common feature of GNU software.

There are probably a few reasons that the two methods are used. One, of course, is tradition. Programmers and users are humans, and humans expect things to work in a certain way. If there's no reason to change (and really, for a command line, there's not much reason to change), then don't.

That being said, I know that there are tools out there that use the single hyphen for a long option, or even get rid of the hyphens altogether. These tools can be difficult at first, and tend to stick out as warts in an otherwise-unified system.

When I was learning the difference between the two (and before it became second nature), I would always remember that the "short" hyphen matches the "short" options, while the "long" (or double) hyphen matches the "long" options. I don't know if that reasoning was used in the development of the double-hyphen style, but it's a possiblity.