![当模式包含连字符“-”时与 grep 匹配](https://linux22.com/image/117049/%E5%BD%93%E6%A8%A1%E5%BC%8F%E5%8C%85%E5%90%AB%E8%BF%9E%E5%AD%97%E7%AC%A6%E2%80%9C-%E2%80%9D%E6%97%B6%E4%B8%8E%20grep%20%E5%8C%B9%E9%85%8D.png)
我编写了以下命令来将 $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 作为模式的选项(此处使用<<<
zsh
here-string 运算符而不是echo
;另请参阅printf '%s\n' "$a"
可移植性)。
grep -Fxc -e "$b" <<<"$a"
或者除了其他选项之外。
grep -Fxce "$b" <<<"$a"
由于您的目标是逐字节字符串相等比较请改用该[
命令。
if [ "$a" = "$b" ]
或者如果$a
contains $b
,则使用[[...]]
ksh 构造:
if [[ $a == *"$b"* ]]
或者在所有类似 Bourne 的 shell 中更便携:
case $a in
*"$b"*) ...
esac