避免在Bash-here文档中转义

避免在Bash-here文档中转义,bash,escaping,latex,heredoc,Bash,Escaping,Latex,Heredoc,如何在Bash-here文档中存储文本而不必转义特殊字符?例如,如何修改以下脚本以保留LaTeX代码 #!/bin/bash IFS= read -d '' titlePage << "EOF" \documentclass{article} \usepackage{graphicx} \usepackage{fix-cm} \begin{document} \pagestyle{empty} \vspace*{\fill} \begin{center} \hrule \vspac

如何在Bash-here文档中存储文本而不必转义特殊字符?例如,如何修改以下脚本以保留LaTeX代码

#!/bin/bash

IFS= read -d '' titlePage << "EOF"
\documentclass{article}
\usepackage{graphicx}
\usepackage{fix-cm}
\begin{document}
\pagestyle{empty}
\vspace*{\fill}
\begin{center}
\hrule
\vspace{1.5 cm}
\textbf{
\fontsize{25}{45}\selectfont
The Title\\
of\\
\fontsize{45}{45}\selectfont
\vspace{0.5 cm}
THIS DOCUMENT\\
\vspace{1.5 cm}
\hrule
\vspace{3.5 cm}
}
\end{center}
\vspace*{\fill}
\end{document}
EOF
echo "${titlePage}" >> 0.tex
pdflatex 0.tex

对于这样的东西,你也可以考虑把它从文件本身中排除出来。 它还将代码与数据分开。这就是我经常使用它的原因

#!/bin/sh

titlepage=$(sed '1,/^#START-TITLE/d;/^#END-TITLE/,$d' $0)
....
exit 0

#START-TITLE
.....
#END-TITLE

也考虑一个缩进的DOC:

foo <<- \marker
    tab-indented text
    marker

<>这也给出了一些视觉上的分离。

对于这样的东西,你也可以考虑把它从文件本身中拖出来。 它还将代码与数据分开。这就是我经常使用它的原因

#!/bin/sh

titlepage=$(sed '1,/^#START-TITLE/d;/^#END-TITLE/,$d' $0)
....
exit 0

#START-TITLE
.....
#END-TITLE

也考虑一个缩进的DOC:

foo <<- \marker
    tab-indented text
    marker
这也提供了一些视觉分离。

免责声明:

有关正确且最简单的解决方案,请参阅。 虽然这个答案一直有效,但它最初包含了一个不正确的说法。现在这只是一个替代方案。 由于此处分配了一个变量,另一种解决方案是使用常规但多行的单引号字符串文字:

字符串中的空格很重要:

内容在“开始”之后立即开始。 结束时,在最后一个字符后直接放置结束符除非您想要终止\n。 此方法不提供-here doc选项,该选项用于剥离前导选项卡以允许缩进以获得视觉清晰度。 免责声明:

有关正确且最简单的解决方案,请参阅。 虽然这个答案一直有效,但它最初包含了一个不正确的说法。现在这只是一个替代方案。 由于此处分配了一个变量,另一种解决方案是使用常规但多行的单引号字符串文字:

字符串中的空格很重要:

内容在“开始”之后立即开始。 结束时,在最后一个字符后直接放置结束符除非您想要终止\n。 此方法不提供-here doc选项,该选项用于剥离前导选项卡以允许缩进以获得视觉清晰度。
问题不在于here文档,而在于read解析其输入。使用read-r应该有帮助;或者,如果你真的只想把here文档放在一个文件中,cat问题不在于here文档,而在于read解析它的输入。使用read-r应该有帮助;或者如果你真的只想把这里的文件归档,cat