Napisałem następujące polecenie, aby dopasować $ a do $ b, ale gdy wartość zawiera „-”, to pojawia się błąd. Jak mogę tego uniknąć?
# a="-Xmx5324m"
# b="-Xmx5324m"
#
#
# echo "$a" | grep -Fxc "$b"
grep: conflicting matchers specified
grep
special-characters
Yael
źródło
źródło
grep -Fxc -- "$b" <<< "$a"
uniknąć niepotrzebnej rury[[ ... ]]
lubcase
byłoby lepszym wyborem, ponieważ można uniknąć zarówno dziwactwecho
i procesów potomnych.grep
raczej jako dosłowny znak niż początek opcji, tzn.echo test-test | grep "\-test"
Będzie pasował, a nie narzekał na nieznaną-t
flagę.Odpowiedzi:
Umieść
--
przed wzorem:--
określa opcje końca poleceń dla wielu poleceń / wbudowanych powłok, po czym pozostałe argumenty są traktowane jako argumenty pozycyjne.źródło
Oprócz świetnej odpowiedzi @ sebasth , możesz powiedzieć, że WZÓR z
grep's -e
opcją użycia WZORZEC jako wzorca (tutaj używając<<<
zsh
operatora ciąg-znaków zamiastecho
; patrz takżeprintf '%s\n' "$a"
przenośność).Lub wszystkie oprócz innych opcji.
Ponieważ twoim celem jest porównanie równości ciągu bajt po bajcie,
[
zamiast tego użyj polecenia.Lub jeśli
$a
zawiera$b
, używając[[...]]
konstrukcji ksh:Lub bardziej przenośnie we wszystkich muszlach podobnych do Bourne'a:
źródło
==
nie jest standardem dla[
polecenia; to jest bashism . Użyj=
zamiast tego.