Eu escrevi o seguinte comando para combinar $ 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
grep
special-characters
yael
fonte
fonte
grep -Fxc -- "$b" <<< "$a"
evitar o tubo desnecessário[[ ... ]]
oucase
seria uma escolha melhor, pois você evita as idiossincrasiasecho
e os processos filhos.grep
como um caractere literal, e não o início de uma opção, ou sejaecho test-test | grep "\-test"
, corresponderá ao invés de reclamar de um-t
sinalizador desconhecido .Respostas:
Coloque
--
antes do seu padrão:--
especifica opções de final de comando para muitos comandos / shell internos, após o qual os argumentos restantes são tratados como argumentos posicionais.fonte
Além da ótima resposta do @ sebasth , você poderia dizer ao PATTERN com a
grep's -e
opção de usar o PATTERN como padrão (aqui, usando o<<<
zsh
operador aqui-string em vez deecho
; veja tambémprintf '%s\n' "$a"
a portabilidade).Ou tudo ao lado de outras opções.
Como seu objetivo é a comparação de igualdade de cadeias de bytes a bytes, use o
[
comando.Ou se
$a
contém$b
, usando a[[...]]
construção ksh:Ou mais portatilmente em todas as conchas do tipo Bourne:
fonte
==
não é padrão para o[
comando; é um basismo . Use em=
vez disso.