Como corolario tardío de las respuestas anteriores aquí, probablemente termines en situaciones en las que quieras que algunas pero no todas las variables se interpolen. Puede resolver eso mediante el uso de barras invertidas para escapar de los signos de dólar y los retrocesos; o puedes poner el texto estático en una variable.
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
Demostración: https://ideone.com/rMF2XA
Tenga en cuenta que cualquiera de los mecanismos de cotización - \____HERE
o "____HERE"
o'____HERE'
, deshabilitará toda interpolación de variables y convertirá el documento aquí en un texto literal.
Una tarea común es combinar variables locales con un script que debe ser evaluado por un shell, lenguaje de programación u 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"
:
''
), pero al no citar el delimitador se activa la expansión (como si estuviera dentro""
). Sin embargo, su intuición es correcta en Perl, donde un heredoc con un identificador entre comillas simples se comporta como si estuviera entre comillas simples, uno con un identificador entre comillas dobles como si estuviera entre comillas dobles y otro con un identificador marcado como comillas inversas. ! Ver: perlop: << EOF