I have seen --
used in the compgen
command.
For example:
compgen -W "foo bar baz" -- b
What is the meaning of the --
in there?
I have seen --
used in the compgen
command.
For example:
compgen -W "foo bar baz" -- b
What is the meaning of the --
in there?
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
--
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
--
, 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
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 '16 at 10:06
This marks end of parameter (option) list.
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
, andtest
builtins do not accept options and do not treat--
specially. Theexit
,logout
,break
,continue
,let
, andshift
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.
POSIX.1-2017
12.2 Utility Syntax Guidelines
Guideline 10:
The first
--
argument that is not an option-argument should be accepted as a delimiter indicating the end of options. Any following arguments should be treated as operands, even if they begin with the '-
' character.
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02