Будучи пізнім наслідком попередніх відповідей тут, ви, ймовірно, опиняєтесь у ситуаціях, коли хочете, щоб деякі, але не всі змінні були інтерпольовані. Ви можете вирішити це, використовуючи зворотні косої риски, щоб уникнути знаків долара та задньої позиції; або ви можете помістити статичний текст у змінну.
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
Демонстрація: https://ideone.com/rMF2XA
Зауважте, що будь-який із механізмів цитування - \____HERE
або "____HERE"
або '____HERE'
- відключить всю змінну інтерполяцію та перетворить документ тут у фрагмент буквального тексту.
Поширене завдання - поєднувати локальні змінні зі сценарієм, які слід оцінювати за допомогою іншої оболонки, мови програмування або віддаленого хоста.
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"
:
''
), але не цитування роздільника перетворює розширення (як би воно було""
). Однак ваша інтуїція правильна в Perl, де гередок з одноцитованим ідентифікатором поводиться так, ніби він знаходиться в одинарних лапках, один з ідентифікатором з подвійним котируванням, як у подвійних лапках, а інший з ідентифікатором, який поставлений назад, як би в задніх колах ! Дивіться: перлоп: << EOF