当模式包含连字符“-”时与 grep 匹配

当模式包含连字符“-”时与 grep 匹配

我编写了以下命令来将 $a 与 $b 匹配,但是当该值包含“-”时,我收到错误。我怎样才能避免这种情况?

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

答案1

放置--在图案之前:

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

--为许多命令/shell 内置命令指定命令选项结束,之后剩余的参数将被视为位置参数。

答案2

除了@sebasth 的精彩回答之外,你可以用grep's -e 使用 PATTERN 作为模式的选项(此处使用<<< zshhere-string 运算符而不是echo;另请参阅printf '%s\n' "$a"可移植性)。

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

或者除了其他选项之外。

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

由于您的目标是逐字节字符串相等比较请改用该[命令。

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

或者如果$acontains $b,则使用[[...]]ksh 构造:

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

或者在所有类似 Bourne 的 shell 中更便携:

case $a in
  *"$b"*) ...
esac

相关内容