Existe uma diferença prática.
curl -sSL https://get.docker.com/ | sh
inicia curl
e sh
ao mesmo tempo, conectando a saída de curl
com a entrada de sh
. curl
será executado com o download (aproximadamente) tão rápido quanto sh
pode executar o script. O servidor pode detectar as irregularidades no tempo e injetar código malicioso não visível quando simplesmente baixar o recurso em um arquivo ou buffer ou ao visualizá-lo em um navegador.
Em sh -c "$(curl -sSL https://get.docker.com/)"
, curl
é executado estritamente antes que o sh
seja executado. Todo o conteúdo do recurso é baixado e passado para o seu shell antes que o sh
seja iniciado. Seu shell só inicia sh
quando curl
saiu e passa o texto do recurso para ele. O servidor não pode detectar a sh
call; só é iniciado depois que a conexão termina. É semelhante ao download do script em um arquivo primeiro.
(Isso pode não ser relevante no caso docker, mas pode ser um problema em geral e destaca uma diferença prática entre os dois comandos.)