我编写了以下命令来将 $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