Odpowiedzi:
ARGS="-a -b -c"
grep -- "$ARGS"
grep -- "--name awesome"
.
Myślnik jest znakiem specjalnym w Bash, jak zauważono na stronie http://tldp.org/LDP/abs/html/special-chars.html#DASHREF . Tak więc uniknięcie tego raz omija Bash, ale Grep wciąż ma swoje własne znaczenie dla myślników (podając opcje).
Więc naprawdę musisz uciec z niego dwa razy (jeśli wolisz nie używać innych wymienionych odpowiedzi). Następujące będą / powinny działać
grep \\-X
grep '\-X'
grep "\-X"
Jednym ze sposobów sprawdzenia, w jaki sposób Bash przekazuje argumenty do skryptu / programu, jest utworzenie skryptu .sh, który po prostu wyśle echo wszystkich argumentów. Od czasu do czasu używam skryptu o nazwie echo-args.sh, wszystko co zawiera to:
echo $*
Przywołuję to jako:
bash echo-args.sh \-X
bash echo-args.sh \\-X
bash echo-args.sh "\-X"
Masz pomysł.
grep -e -X
da rade.
-P
(ale to już inna historia i nie ma tu zastosowania)).
grep -- -X
grep \\-X
grep '\-X'
grep "\-X"
grep -e -X
grep [-]X
Prawidłowym sposobem byłoby użycie „-”, aby zatrzymać przetwarzanie argumentów, jak już wspomniano. Wynika to z użycia getopt_long (funkcja GNU C z getopt.h) w źródle narzędzia.
Dlatego zauważasz te same zjawiska w innych narzędziach wiersza poleceń; ponieważ większość z nich to narzędzia GNU i używają tego wywołania, zachowują się tak samo.
Na marginesie - getopt_long daje nam fajny wybór między opcjami -rlo i --really_long_option oraz kombinacją argumentów w tłumaczu.
możesz użyć nawk
$ nawk '/-X/{print}' file
ls -l | grep "^-"
Mam nadzieję, że ten spełni twoje zadanie.
plik grep „^ -X”
Będzie grep i wybierze wszystkie linie z pliku. ^ w grep „^” oznacza linię zaczynającą się od
-
, a nie linii.
--
oznacza lub robi: unix.stackexchange.com/questions/11376/…