Переменная не интерпретируется с помощью «EOF»

Это мой сценарий:

var="lalallalal" tee file.tex <<'EOF' text \\ text \\ $var EOF 

Необходимо использовать «EOF» (с кавычками), потому что я не могу использовать double slash ( // ) в противном случае.

Однако, если я использую кавычки, переменная $var не будет расширена.

Если вы укажете EOF , переменные не будут расширены, как вы узнали. Это описано в разделе «Документы здесь» man bash :

  No parameter and variable expansion, command substitution, arithmetic expansion, or pathname expansion is performed on word. If any part of word is quoted, the delimiter is the result of quote removal on word, and the lines in the here-document are not expanded. If word is unquoted, all lines of the here-document are subjected to parameter expansion, command substitution, and arithmetic expansion, the charac‐ ter sequence \<newline> is ignored, and \ must be used to quote the characters \, $, and `. 

Другое объяснение заключается в том, что вы все еще можете использовать \ , вам просто нужно избежать этого: \\ . Итак, поскольку вы хотите два \ , вам нужно уйти от каждого из них: \\\\ . Объединяя все это:

 #!/bin/bash var="lalallalal" tee file.tex <<EOF text \\\\ text \\\\ $var EOF 

Кажется, вы хотите, чтобы расширение включалось только для части документа или только для некоторых специальных символов ( $ yes, \ no). В первом случае вы можете разделить здесь-документ на два, а во втором случае предлагать нестандартный подход: лечить \ как переменную:

 var="lalallalal" bs='\'; #backslash tee file.tex <<EOF text $bs$bs text $bs$bs $var EOF