I have seen
-- used in the
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
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
--to signify the end of the options.
testbuiltins do not accept options and do not treat
shiftbuiltins accept and process arguments beginning with
--. 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.
echodoes not interpret
--to mean the end of options.
12.2 Utility Syntax Guidelines
--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 '