En corollaire tardif des réponses précédentes ici, vous vous retrouvez probablement dans des situations où vous voulez que certaines variables, mais pas toutes , soient interpolées. Vous pouvez résoudre ce problème en utilisant des contre-obliques pour échapper aux signes dollar et aux contre-obliques; ou vous pouvez mettre le texte statique dans une 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
Démo: https://ideone.com/rMF2XA
Notez que n'importe lequel des mécanismes de citation - \____HERE
ou "____HERE"
ou '____HERE'
- désactivera toute interpolation variable, et transformera le document ici en un morceau de texte littéral.
Une tâche courante consiste à combiner des variables locales avec un script qui doit être évalué par un shell, un langage de programmation ou un hôte distant différent.
local=$(uname)
ssh -t remote <<:
echo "$local is the value from the host which ran the ssh command"
remote=\$(uname)
echo "\$remote is the value from the host we ssh:ed to"
:
''
), mais ne pas la citation du délimiteur active l'expansion (comme si elle était dans""
). Cependant, votre intuition est correcte en Perl, où un heredoc avec un identifiant entre guillemets se comporte comme s'il était entre guillemets simples, un avec un identifiant entre guillemets doubles comme s'il était entre guillemets et un avec un identifiant rétrogradé comme s'il était entre guillemets ! Voir: perlop: << EOF