No código do programa, você precisa marcar quais partes devem ser comandos e quais devem ser dados. No tipo típico de dados estão strings , significando sequências de caracteres (letras, dígitos, etc.)
Existem diferentes maneiras de indicar literais de string. A maneira mais comum é citar os dados da string:
PATH="/home/user"
USER='joe'
Mas pode ser difícil lidar com literais de string mais longos e / ou incluir quebras de linha:
MESSAGE="This is a relatively long string which isn't represented very well as a typical quoted string.\nAnd there are linebreaks in it."
Para tais casos, você provavelmente gostaria de poder dizer: "Trate o seguinte como uma string, até que eu diga o contrário". E é exatamente isso que um documento aqui faz. É uma maneira diferente de significar uma string literal. Você define um marcador que significa o final do seu texto, depois coloca o seu texto e, em seguida, o marcador:
MESSAGE=<< EOF
Here be a long string.
With line breaks.
EOF
Você está livre para escolher o marcador, mas normalmente é algo como EOF ("fim do arquivo"), eot ("fim do texto") ou similar . Você poderia ter escolhido "ABC" da mesma forma
MESSAGE=<< ABC
Here be a long string.
With line breaks.
ABC
"Here documents", também conhecidos como "heredocs", "here-strings" ou similares, originaram-se em shells Unix como bash
e hoje podem ser encontrados em muitas linguagens de programação.
Em shells, eles funcionam de forma um pouco diferente, já que não representam strings tanto quanto representam arquivos . Então, por exemplo
cat << EOF
One
EOF
é equivalente a
cat data.txt # where data.txt contains 'One'
A variante com <<-
em vez de '< <' ignora os espaços em branco iniciais nos dados heredoc, para que você possa tornar seu código mais legível identificando o heredoc:
cat <<- EOF
One
Two
Three
EOF