Todos os exemplos são de atribuição de variáveis a partir da substituição de comandos, então eles são equivalentes. De acordo com a resposta de Gilles, a citação não é necessária à direita da atribuição à variável, pois a divisão de palavras não ocorrer lá. Então todos os quatro estão bem.
Se eles fossem autônomos, ou seja, não em atribuição, você precisaria citar. A forma $(...)
comparada aos backticks tem a vantagem de que aspas podem ser aninhadas e divididas em várias linhas, e é por isso que essa forma é geralmente preferida atualmente. Em outras palavras, você pode fazer "$( echo "$var" )"
com este formulário para proteger tanto a expansão interna de $var
quanto a expansão externa de $(...)
da divisão de palavras e da globalização de nomes de arquivos.
Conforme mostrado nas especificações Linguagem de comando do shell POSIX , os scripts de múltiplas linhas incorporados não trabalhe com backticks (à esquerda), mas trabalhe com $()
form (à direita).
echo ' echo $(
cat <<\eof cat <<\eof
a here-doc with ' a here-doc with )
eof eof
' )
echo ' echo $(
echo abc # a comment with ' echo abc # a comment with )
' )
echo ' echo $(
echo ''' echo ')'
' )