Respostas:
ARGS="-a -b -c"
grep -- "$ARGS"
grep -- "--name awesome"
,.
O traço é um caractere especial no Bash, conforme observado em http://tldp.org/LDP/abs/html/special-chars.html#DASHREF . Portanto, escapar dessa vez apenas leva você ao Bash, mas o Grep ainda tem seu próprio significado para traços (fornecendo opções).
Então você realmente precisa escapar duas vezes (se preferir não usar as outras respostas mencionadas). O seguinte irá / deve funcionar
grep \\-X
grep '\-X'
grep "\-X"
Uma maneira de testar como o Bash passa argumentos para um script / programa é criar um script .sh que apenas faça eco de todos os argumentos. Eu uso um script chamado echo-args.sh para brincar de vez em quando, tudo o que ele contém é:
echo $*
Eu o invoco como:
bash echo-args.sh \-X
bash echo-args.sh \\-X
bash echo-args.sh "\-X"
Você entendeu a ideia.
grep -e -X
fará o truque.
-P
(mas isso é outra história e não se aplica aqui)).
grep -- -X
grep \\-X
grep '\-X'
grep "\-X"
grep -e -X
grep [-]X
A maneira correta seria usar "-" para interromper o processamento de argumentos, como já mencionado. Isso se deve ao uso de getopt_long (função GNU C de getopt.h) na fonte da ferramenta.
É por isso que você percebe o mesmo fenômeno em outras ferramentas de linha de comando; como a maioria delas são ferramentas GNU e usam essa chamada, elas exibem o mesmo comportamento.
Como observação lateral - getopt_long é o que nos dá a escolha legal entre -rlo e --really_long_option e a combinação de argumentos no intérprete.
você pode usar nawk
$ nawk '/-X/{print}' file
ls -l | grep "^-"
Espero que este sirva ao seu propósito.
arquivo grep "^ -X"
Ele irá grep e escolherá todas as linhas do arquivo. ^ no grep "^" indica uma linha que começa com
-
, não linhas.
--
meio ou faz: unix.stackexchange.com/questions/11376/...