Sebagai jawaban akhir dari jawaban sebelumnya di sini, Anda mungkin berakhir dalam situasi di mana Anda ingin beberapa tetapi tidak semua variabel diinterpolasi. Anda dapat menyelesaikannya dengan menggunakan backslash untuk menghindari tanda dolar dan backticks; atau Anda dapat meletakkan teks statis dalam suatu variabel.
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
Demo: https://ideone.com/rMF2XA
Perhatikan bahwa salah satu mekanisme penawaran - \____HERE
atau "____HERE"
atau '____HERE'
- akan menonaktifkan semua interpolasi variabel, dan mengubah dokumen di sini menjadi sepotong teks literal.
Tugas umum adalah menggabungkan variabel lokal dengan skrip yang harus dievaluasi oleh shell yang berbeda, bahasa pemrograman, atau host jarak jauh.
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"
:
''
), tetapi tidak mengutip pembatas yang mengaktifkan ekspansi (seolah-olah ada di""
). Namun, intuisi Anda benar di Perl, di mana heredoc dengan pengenal tanda kutip tunggal berperilaku seolah-olah itu dalam tanda kutip tunggal, satu dengan pengenal tanda kutip ganda seolah-olah dalam tanda kutip ganda, dan satu dengan pengenal tanda centang-balik seolah-olah dalam backticks ! Lihat: perlop: << EOF