Coloque --
antes do seu padrão:
echo "$a" | grep -Fxc -- "$b"
--
especifica opções de fim de comando para muitos comandos / shell embutidos, após o qual os argumentos restantes são tratados como argumentos posicionais.
Eu escrevi o seguinte comando para casar $ a com $ b, mas quando o valor inclui "-", recebo um erro. Como posso evitar isso?
# a="-Xmx5324m"
# b="-Xmx5324m"
#
#
# echo "$a" | grep -Fxc "$b"
grep: conflicting matchers specified
Além da grande resposta do @sebasth , você poderia dizer que PATTERN com grep's -e
opção para usar PATTERN como um padrão (aqui usando o operador <<<
zsh
here-string em vez de echo
; veja também printf '%s\n' "$a"
para portabilidade).
grep -Fxc -e "$b" <<<"$a"
Ou tudo ao lado de outras opções.
grep -Fxce "$b" <<<"$a"
Como seu objetivo é de byte a byte, comparação de igualdade de strings use o comando [
.
if [ "$a" = "$b" ]
Ou se $a
contiver $b
, usando a construção [[...]]
ksh:
if [[ $a == *"$b"* ]]
Ou mais portável em todos os shells parecidos com Bourne:
case $a in
*"$b"*) ...
esac
Tags grep special-characters