Qual é a diferença entre grep apple file
e grep "apple" file
? O que faz as aspas? Ambos parecem funcionar e fazem exatamente a mesma coisa (exibir a mesma linha).
22
As aspas afetam os caracteres que seu shell considera especiais e têm um significado sintático. No seu exemplo, isso não faz diferença porque apple
não contém esses caracteres.
Mas considere outro exemplo: grep apple tree file
procurará a palavra apple
nos arquivos tree
e file
, enquanto grep "apple tree" file
procurará a palavra apple tree
no arquivo file
. As aspas indicam ao bash que a palavra espaço em "apple tree"
não inicia um novo parâmetro, mas deve fazer parte do parâmetro atual. grep apple\ tree file
produziria o mesmo resultado, porque \
diz ao bash para desconsiderar o significado especial do caractere a seguir e tratá-lo literalmente.
grep a*b equations.txt
, ele procuraráa*b
, a menos que exista um arquivo no diretório atual começando com ae terminando em b; nesse caso (porque (ba) sh expandirá os nomes dos arquivos na linha de comando), grep será chamado com complete parâmetros diferentes, resultando em resultados diferentes. Isso geralmente é mais um problema com o find, pois um comando comofind . -name *.txt
resultará em comportamento inesperado, se houver um arquivo txt no diretório atual. É melhor usar aspas neste caso."
) e aspas simples ('
). Aspas simples impedem a interpretação de certos caracteres, como$
, enquanto as aspas duplas permitem a interpretação. Por exemplogrep '${USER}'
, procurará o texto${USER}
, enquantogrep "${USER}"
procurará o texto que a variávelUSER
contém (por exemplojohnstacen
).As aspas duplas permitem a avaliação, as aspas simples impedem a avaliação, as aspas não permitem a expansão de caracteres curinga, quando usadas na linha de comando. Como exemplos planejados:
A compreensão do modo como as aspas funcionam é essencial para entender o Bash. Por exemplo:
Você pode usar aspas simples para passar um comando por meio de uma variável. Aspas simples impedirão a avaliação. Aspas duplas serão avaliadas.
Você pode usar aspas simples dentro de aspas duplas e você pode usar aspas duplas dentro de aspas duplas, mas aspas duplas dentro de aspas simples
não devem ser feitas (sem escapá-las)não serão avaliadas, elas serão interpretadas literalmente. Aspas simples dentro de aspas simples não devem ser feitas (sem escapá-las).Você precisará obter um entendimento completo das cotações para usar o Bash com eficiência. Muito importante!
Como regra geral, eu não uso aspas se quiser que o Bash expanda algo em elementos (como uma matriz), uso aspas simples para cadeias de caracteres literais que não devem ser alteradas e faço uso liberal de aspas duplas para variáveis que provavelmente retornarão qualquer tipo de string. Isso é para garantir que espaços e caracteres especiais sejam preservados.
fonte