Como corolário tardio das respostas anteriores aqui, você provavelmente acaba em situações em que deseja que algumas, mas nem todas as variáveis sejam interpoladas. Você pode resolver isso usando barras invertidas para escapar de cifrões e reticulares; ou você pode colocar o texto estático em uma variável.
Name='Rich Ba$tard'
dough='$$$dollars$$$'
cat <<____HERE
$Name, you can win a lot of $dough this week!
Notice that \`backticks' need escaping if you want
literal text, not `pwd`, just like in variables like
\$HOME (current value: $HOME)
____HERE
Demonstração: https://ideone.com/rMF2XA
Observe que qualquer um dos mecanismos de citação - \____HERE
ou "____HERE"
ou '____HERE'
- desabilitará toda a interpolação de variáveis e transformará o documento aqui em um pedaço de texto literal.
Uma tarefa comum é combinar variáveis locais com scripts, que devem ser avaliados por um shell, linguagem de programação ou host remoto diferente.
local=$(uname)
ssh -t remote <<:
echo "$local is the value from the host which ran the ssh command"
# Prevent here doc from expanding locally; remote won't see backslash
remote=\$(uname)
# Same here
echo "\$remote is the value from the host we ssh:ed to"
:
''
), mas não citar o delimitador ativa a expansão (como se estivesse dentro""
). No entanto, sua intuição está correta no Perl, onde um heredoc com identificador de aspas simples se comporta como se estivesse entre aspas simples, um com um identificador de aspas duplas como se estivesse entre aspas duplas e outro com identificador de retorno marcado como se estivesse em backticks ! Veja: perlop: << EOF