Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have seen -- used in the compgen command.

For example:

compgen -W "foo bar baz" -- b

What is the meaning of the --.

share|improve this question
up vote 209 down vote accepted

More precisely, a double dash (--) is used in bash built-in commands and many other commands to signify the end of command options, after which only positional parameters are accepted.

Example use: lets say you want to grep a file for the string -v - normally -v will be considered the option to reverse the matching meaning (only show lines that do not match), but with -- you can grep for string -v like this:

grep -- -v file
share|improve this answer
Most notably in the Bash set built-in, where it's absolutely necessary. – l0b0 Oct 18 '12 at 9:03
-- works to separate options from regular expressions in grep, but the canonical way is to use -e/--regexp. – l0b0 Oct 18 '12 at 9:05
@l0b0: the pattern to search is normally one of the positional parameters, so it can fit after the --, though you are correct in noting that my example above could also be written as grep -e -v file (although that is very confusing). – Guss Jan 21 '15 at 16:12
Not all bash builtin commands accept -- as the end of option marker. [ and echo don't for instance (one of the reasons echo can't be used reliably). – Stéphane Chazelas Mar 21 at 10:06

This marks end of parameter (option) list.


share|improve this answer

In man bash we can read in Shell Builtin Commands section:

Unless otherwise noted, each builtin command documented in this section as accepting options preceded by - accepts -- to signify the end of the options.

The :, true, false, and test builtins do not accept options and do not treat -- specially. The exit, logout, break, continue, let, and shift builtins accept and process arguments beginning with - without requiring --. Other builtins that accept arguments but are not specified as accepting options interpret arguments beginning with - as invalid options and require -- to prevent this interpretation.

Note that echo does not interpret -- to mean the end of options.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.