loading...

What Does "--" (Double-Dash) Mean?

marounmaroun profile image Maroun Maroun ・1 min read

From man bash:

-- A -- signals the end of options and disables further option processing. Any arguments after the -- are treated as
filenames and arguments. An argument of - is equivalent to --.

In other words, -- is used to signify the end of command options. After it, only positional parameters are accepted.

For example, we want to look for the "--color" string using grep:

$ echo "hello --color" | grep --color
usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
    [-e pattern] [-f file] [--binary-files=value] [--color=when]
    [--context[=num]] [--directories=action] [--label] [--line-buffered]
    [--null] [pattern] [file ...]

We got an error, since --color expect a value. We can fix by signaling the end of options to the grep command using --:

$ echo "hello --color" | grep -- --color
hello --color

It's important to note that not all bash builtin commands accept the -- as an end-of-options marker.

Posted on by:

marounmaroun profile

Maroun Maroun

@marounmaroun

Nice to meet you 🍻 My name is Maroun. I'm a dad, musician, programmer, Stackoverflower and astronaut wannabe.

Discussion

pic
Editor guide