Ich habe den folgenden Befehl geschrieben, um $ a mit $ b abzugleichen, aber wenn der Wert "-" enthält, wird eine Fehlermeldung angezeigt. Wie kann ich das vermeiden?
# a="-Xmx5324m"
# b="-Xmx5324m"
#
#
# echo "$a" | grep -Fxc "$b"
grep: conflicting matchers specified
grep
special-characters
Yael
quelle
quelle
grep -Fxc -- "$b" <<< "$a"
[[ ... ]]
odercase
wäre eine bessere Wahl, da Sie sowohl die Eigenheitenecho
als auch die untergeordneten Prozesse vermeiden .grep
als wörtliches Zeichen und nicht als Beginn einer Option verstanden wird, dhecho test-test | grep "\-test"
eher übereinstimmt als sich über eine unbekannte-t
Flagge beschwert .Antworten:
Platzieren Sie
--
vor Ihrem Muster:--
Gibt die Optionen für das Ende des Befehls für viele integrierte Befehle / Shell an. Danach werden die verbleibenden Argumente als Positionsargumente behandelt.quelle
Neben der großartigen Antwort von @ sebasth können Sie feststellen, dass PATTERN die
grep's -e
Option hat, PATTERN als Muster zu verwenden (hier mit dem<<<
zsh
Here-String-Operator anstelle vonecho
; siehe auchprintf '%s\n' "$a"
Portabilität).Oder alles neben anderen Optionen.
Da Ihr Ziel der Vergleich der Byte-zu-Byte- Zeichenfolgengleichheit ist, verwenden Sie
[
stattdessen den Befehl.Oder wenn es
$a
enthält$b
, verwenden Sie das[[...]]
ksh-Konstrukt:Oder tragbarer in allen Bourne-ähnlichen Muscheln:
quelle
==
ist kein Standard für den[
Befehl; Es ist ein Bashismus . Verwenden Sie=
stattdessen.