Take the 2-minute tour ×

Where did the convention of using single dashes for letters and doubles dashes for words come from and why is continued to be used?

For example if I type in ls --help, you see:

  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file
  -b, --escape               print octal escapes for nongraphic characters
      --block-size=SIZE      use SIZE-byte blocks
  -B, --ignore-backups       do not list implied entries ending with ~

I tried googling - and -- convention even with quotes with little success.

share|improve this question
add comment

4 Answers

up vote 31 down vote accepted

In The Art of Unix Programming Eric Steven Raymond describes how this practice evolved:

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.


[1] http://www.faqs.org/docs/artu/ch10s05.html

share|improve this answer
add comment

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".

share|improve this answer
+1 for answering the question about searching. –  rahmu Oct 1 '11 at 22:20
+1 Thanks this really does help with the logic behind the implementation. –  Larry Oct 1 '11 at 23:29
add comment

In wikipedia Command-line interface it is reported:

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.

share|improve this answer
add comment

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.

share|improve this answer
add comment

Your Answer


