É porque criar uma corda gigante e passá-la como argumento não é o que "documentos aqui" fazem. Eles criam um fluxo, que pode ser conectado à entrada de algum trabalho.
Concretamente,
cat <<!
foo
!
não é equivalente a
cat foo
.
Falando de cat
, isso pode nos ajudar aqui. Aviso: o uso inútil não - de cat
segue!
echo $(cat <<!
foo
!
)
Veja, nós podemos passar um documento aqui como um argumento, graças à substituição de comando aplicada a cat
que foi alimentado com um documento aqui.