Antworten:
ARGS="-a -b -c"
grep -- "$ARGS"
grep -- "--name awesome"
.
Der Bindestrich ist ein Sonderzeichen in Bash, wie unter http://tldp.org/LDP/abs/html/special-chars.html#DASHREF angegeben . Wenn Sie dies einmal entkommen, kommen Sie nur an Bash vorbei, aber Grep hat immer noch seine eigene Bedeutung für Bindestriche (indem Sie Optionen bereitstellen).
Sie müssen also wirklich zweimal entkommen (wenn Sie die anderen genannten Antworten nicht verwenden möchten). Folgendes wird / sollte funktionieren
grep \\-X
grep '\-X'
grep "\-X"
Eine Möglichkeit, herauszufinden, wie Bash Argumente an ein Skript / Programm übergibt, besteht darin, ein .sh-Skript zu erstellen, das nur alle Argumente wiedergibt. Ich benutze ein Skript namens echo-args.sh, um von Zeit zu Zeit damit zu spielen. Alles, was es enthält, ist:
echo $*
Ich rufe es auf als:
bash echo-args.sh \-X
bash echo-args.sh \\-X
bash echo-args.sh "\-X"
Du hast die Idee.
grep -e -X
wird den Trick machen.
-P
(aber das ist eine andere Geschichte und gilt hier nicht)).
grep -- -X
grep \\-X
grep '\-X'
grep "\-X"
grep -e -X
grep [-]X
Der richtige Weg wäre, "-" zu verwenden, um die Verarbeitung von Argumenten zu stoppen, wie bereits erwähnt. Dies liegt an der Verwendung von getopt_long (GNU C-Funktion von getopt.h) in der Quelle des Tools.
Aus diesem Grund stellen Sie bei anderen Befehlszeilentools dieselben Phänomene fest. Da die meisten von ihnen GNU-Tools sind und diesen Aufruf verwenden, weisen sie dasselbe Verhalten auf.
Als Randnotiz - getopt_long gibt uns die coole Wahl zwischen -rlo und --really_long_option und der Kombination von Argumenten im Interpreter.
Sie können Nawk verwenden
$ nawk '/-X/{print}' file
ls -l | grep "^-"
Hoffe, dieser würde Ihren Zweck erfüllen.
grep "^ -X" Datei
Es werden alle Zeilen aus der Datei erfasst und ausgewählt. ^ im grep "^" gibt eine Zeile an, die mit beginnt
-
, nicht nach Zeilen.
--
bedeutet oder tut: unix.stackexchange.com/questions/11376/…