Escribí el siguiente comando para hacer coincidir $ a con $ b, pero cuando el valor incluye "-", aparece un error. ¿Cómo puedo evitar eso?
# a="-Xmx5324m"
# b="-Xmx5324m"
#
#
# echo "$a" | grep -Fxc "$b"
grep: conflicting matchers specified
grep
special-characters
yael
fuente
fuente
grep -Fxc -- "$b" <<< "$a"
evitar la tubería innecesaria[[ ... ]]
ocase
sería una mejor opción, ya que evita tanto las idiosincrasiasecho
como los procesos secundarios.grep
como un carácter literal en lugar del comienzo de una opción, es decirecho test-test | grep "\-test"
, coincidirá en lugar de quejarse de una-t
bandera desconocida .Respuestas:
Coloque
--
antes de su patrón:--
especifica las opciones de fin de comando para muchos comandos / funciones integradas de shell, después de lo cual los argumentos restantes se tratan como argumentos posicionales.fuente
Además de la gran respuesta de @ sebasth , podría decir que PATTERN con la
grep's -e
opción de usar PATTERN como patrón (aquí usando el<<<
zsh
operador here-string en lugar deecho
; vea también laprintf '%s\n' "$a"
portabilidad).O todo al lado de otras opciones.
Como su objetivo es la comparación de igualdad de cadena byte a byte, use el
[
comando en su lugar.O si
$a
contiene$b
, usando la[[...]]
construcción ksh:O más portátil en todos los proyectiles tipo Bourne:
fuente
==
no es estándar para el[
comando; Es un bashismo . Usar en su=
lugar.