Isso é explicado muito bem na seção relevante do manual do bash. Resumidamente, qualquer coisa entre aspas simples é interpretada literalmente. Então, por exemplo:
$ echo '$SHELL'
$SHELL
$ echo '{1..3}'
{1..3}
Compare isso com as versões não citadas:
$ echo $SHELL
/bin/bash
$ echo {1..3}
1 2 3
As aspas duplas permitem a expansão variável (também a expansão do histórico e outras coisas). Basicamente, você as usa quando está lidando com algo que deseja ver expandido. Por exemplo:
$ echo "$SHELL"
/bin/bash
$ echo "!!"
echo "echo "$SHELL""
echo /bin/bash
Em outras palavras, aspas simples protegem completamente uma string do shell, enquanto aspas duplas protegem algumas coisas (espaços, por exemplo), mas permitem que variáveis e caracteres especiais sejam expandidos / interpretados corretamente.
\
sempre é tratado literalmente entre aspas simples, mesmo que preceda a'
. Após uma abertura'
, a próxima'
é sempre interpretada como a citação final. Algo como citar'
em uma sequência de aspas simples pode ser alcançado terminando a citação, escapando'
individualmente e iniciando a citação novamente. Ou seja, embora\'
não funcione entre abrir e fechar'
caracteres,'\''
funciona. (Veja Gilles de correção para um dos meus posts quando eu tinha feito o mesmo erro para mais detalhes.)