Na verdade, isso depende do seu shell. As cotações (de qualquer tipo) destinam-se principalmente a lidar com espaços em branco. Por exemplo, o seguinte:
grep hello world file1
procurará a palavra "olá" nos arquivos chamados "mundo" e "arquivo1", enquanto
grep "hello world" file1
procurará "olá mundo" no arquivo1.
A escolha entre aspas simples ou duplas é importante apenas se a cadeia de pesquisa contiver variáveis ou outros itens que você espera que sejam avaliados. Com aspas simples, a sequência é tomada literalmente e nenhuma expansão ocorre. Com aspas duplas, as variáveis são expandidas. Por exemplo (com um shell derivado de Bourne, como Bash ou ZSH):
VAR="serverfault"
grep '$VAR' file1
grep "$VAR" file1
O primeiro grep
procurará a string literal "$ VAR1" no arquivo1. O segundo expandirá a variável "$ VAR" e procurará a string "serverfault" no arquivo1.
$
é final de linha em uma expressão regular; portanto$VAR1
, nunca deve realmente corresponder a nada. Acontece que funciona no GNU grep, mas eu ainda não contaria com esse comportamento. Você precisaria\$VAR1
corresponder com segurança a string literal. (E você precisa de barras invertidas extras se isso é entre aspas.)James está correto, mas para adicionar mais alguns dados, acho que a melhor maneira de pensar sobre isso é como argumentos para o comando: você pretende que "olá" e "mundo" sejam dois argumentos ou "olá mundo" seja um argumento.
Além disso, aspas duplas permitem a interpretação de mais do que apenas variáveis. Exatamente o que depende do seu shell, mas verifique o histórico de expansão, expansão de chaves e expansão de nome de arquivo.
Também é importante observar que há alguns casos em que você precisa usar os dois tipos de aspas em um único argumento. Lembre-se de que os argumentos (por padrão) são delimitados por espaços em branco; portanto, se você não deixar espaço, ainda estará especificando o mesmo argumento.
O mecanismo de citação única da maioria dos shells não permite caracteres especiais, o que significa que qualquer instância de outra citação única, mesmo que pareça escapar, termina a citação. Portanto, é impossível passar uma sequência com uma citação única dentro de uma sequência de citação única, e você deve usar aspas duplas. Isso pode ser um problema quando você deseja passar um argumento que contém aspas simples e algo que seria interpretado, mas não deseja. Por exemplo, se você deseja passar a string literal "'$ VAR' é uma variável", é necessário fazer o seguinte:
Na verdade, é uma concatenação de três strings com escape de aspas:
ou, com as aspas removidas:
Na verdade, com a maioria das conchas, você também pode fazer o seguinte:
onde a barra invertida ("
\
") diz ao shell para aceitar o seguinte caractere literalmente e não fazer nenhuma expansão nele.Mas há alguns casos em que você acaba fazendo isso da maneira de concatenação de várias cadeias, não que eu possa realmente dar um exemplo agora.
fonte