Match with grep when pattern contains hyphen "-"

I wrote the following command in order to match $a with $b, but when the value includes “-“, then I get an error. How can I avoid that?

# a="-Xmx5324m"
# b="-Xmx5324m"
#  echo "$a"  | grep -Fxc "$b"
grep: conflicting matchers specified
Asked By: yael


Place -- before your pattern:

echo "$a"  | grep -Fxc -- "$b"

-- specifies end of command options for many commands/shell built-ins, after which the remaining arguments are treated as positional arguments.

Answered By: sebasth

Besides of @sebasth’s great answer, you could tell that PATTERN with grep's -e option to use PATTERN as a pattern (here using the <<< zsh here-string operator instead of echo; see also printf '%sn' "$a" for portability).

grep -Fxc -e "$b" <<<"$a"

Or all beside of other options.

grep -Fxce "$b" <<<"$a"

Since your goal is byte-to-byte string equality comparison use the [ command instead.

if [ "$a" = "$b" ]

Or if $a contains $b, using the [[...]] ksh construct:

if [[ $a == *"$b"* ]]

Or more portably in all Bourne-like shells:

case $a in
  *"$b"*) ...
Answered By: αғsнιη
Categories: Answers Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.