J'ai écrit la commande suivante afin de faire correspondre $ a avec $ b, mais lorsque la valeur inclut "-", je reçois une erreur. Comment puis-je éviter cela?
# a="-Xmx5324m"
# b="-Xmx5324m"
#
#
# echo "$a" | grep -Fxc "$b"
grep: conflicting matchers specified
grep -Fxc -- "$b" <<< "$a"
éviter le tuyau inutile[[ ... ]]
oucase
serait un meilleur choix, car vous évitez à la fois les particularitésecho
et les processus enfants.grep
comme un caractère littéral plutôt que le début d'une option, c'est-à-direecho test-test | grep "\-test"
qu'il correspondra plutôt que de se plaindre d'un-t
indicateur inconnu .Réponses:
Placez
--
avant votre modèle:--
spécifie les options de fin de commande pour de nombreuses commandes / commandes intégrées au shell, après quoi les arguments restants sont traités comme des arguments positionnels.la source
Outre la grande réponse de @ sebasth , vous pouvez dire que PATTERN avec l'
grep's -e
option d'utiliser PATTERN comme modèle (ici en utilisant l'<<<
zsh
opérateur here-string au lieu deecho
; voir aussiprintf '%s\n' "$a"
pour la portabilité).Ou tout à côté d'autres options.
Puisque votre objectif est la comparaison d'égalité de chaîne octet à octet, utilisez
[
plutôt la commande.Ou si
$a
contient$b
, en utilisant la[[...]]
construction ksh:Ou plus facilement dans tous les obus de type Bourne:
la source
==
n'est pas standard pour la[
commande; c'est un bashisme . Utilisez=
plutôt.