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

yae*_*ael 16 grep special-characters

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

# a="-Xmx5324m"
# b="-Xmx5324m"
#
#
#  echo "$a"  | grep -Fxc "$b"
grep: conflicting matchers specified
Run Code Online (Sandbox Code Playgroud)

seb*_*sth 25

放置--在您的模式之前:

echo "$a"  | grep -Fxc -- "$b"
Run Code Online (Sandbox Code Playgroud)

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


αғs*_*нιη 13

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

grep -Fxc -e "$b" <<<"$a"
Run Code Online (Sandbox Code Playgroud)

或者除了其他选项之外。

grep -Fxce "$b" <<<"$a"
Run Code Online (Sandbox Code Playgroud)

由于您的目标是字节到字节的字符串相等性比较,因此请改用该[命令。

if [ "$a" = "$b" ]
Run Code Online (Sandbox Code Playgroud)

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

if [[ $a == *"$b"* ]]
Run Code Online (Sandbox Code Playgroud)

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

case $a in
  *"$b"*) ...
esac
Run Code Online (Sandbox Code Playgroud)