Risposte:
ARGS="-a -b -c"
grep -- "$ARGS"
grep -- "--name awesome"
.
Il trattino è un personaggio speciale in Bash, come notato su http://tldp.org/LDP/abs/html/special-chars.html#DASHREF . Quindi evadere una volta ti fa superare Bash, ma Grep ha ancora il suo significato per i trattini (fornendo opzioni).
Quindi devi davvero scappare due volte (se preferisci non usare le altre risposte menzionate). Il seguente / dovrebbe funzionare
grep \\-X
grep '\-X'
grep "\-X"
Un modo per provare come Bash passa argomenti a uno script / programma è quello di creare uno script .sh che rispecchi tutti gli argomenti. Uso uno script chiamato echo-args.sh per giocare di tanto in tanto, tutto ciò che contiene è:
echo $*
Lo invoco come:
bash echo-args.sh \-X
bash echo-args.sh \\-X
bash echo-args.sh "\-X"
Ti viene l'idea.
grep -e -X
farà il trucco.
-P
(ma questa è un'altra storia e non si applica qui)).
grep -- -X
grep \\-X
grep '\-X'
grep "\-X"
grep -e -X
grep [-]X
Il modo corretto sarebbe usare "-" per interrompere l'elaborazione degli argomenti, come già accennato. Ciò è dovuto all'utilizzo di getopt_long (funzione C GNU da getopt.h) nella sorgente dello strumento.
Questo è il motivo per cui noti gli stessi fenomeni su altri strumenti da riga di comando; poiché la maggior parte di essi sono strumenti GNU e utilizzano questa chiamata, presentano lo stesso comportamento.
Come nota a margine: getopt_long è ciò che ci dà la scelta interessante tra -rlo e --really_long_option e la combinazione di argomenti nell'interprete.
puoi usare nawk
$ nawk '/-X/{print}' file
ls -l | grep "^-"
Spero che questo possa servire al tuo scopo.
file grep "^ -X"
Grep e selezionerà tutte le linee del file. ^ in grep "^" indica una riga che inizia con
-
, non linee.
--
significhi o faccia: unix.stackexchange.com/questions/11376/…