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
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.
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"*) ...
esac