Dê uma olhada na página man bash. Há uma seção inteira sobre cotação. Porque este licenciado sob a GFDL, que não é compatível com a licença CC-BY-SA usada aqui, não vou citar a coisa toda, mas realmente lendo essa é a resposta mais definitiva .
Em resumo, as aspas simples param toda a interpretação - a string é renderizada literalmente. Aspas duplas deixam $ (sinal de dólar), '(backquote) como especial e \ (barra invertida) como especiais quando seguidos por alguns outros caracteres. E ! será tratado especialmente se o recurso de expansão de histórico estiver ativado (o que é por padrão).
No uso prático, o $ é o grande problema, já que muitas vezes você pode querer as várias expansões que ele permite (variáveis e mais), enquanto ainda impede que o shell atrapalhe a maior parte da linha de comando.