如何在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
答案 0 :(得分:3)
问题不在于这里的文档,而在于read
解析其输入的事实。使用read -r
应该会有所帮助;或者如果您真的只想在文件中使用此文档,cat <<'here' >file
答案 1 :(得分:2)
声明:
由于变量被分配到此处,另一个解决方案是使用常规 - 但多行 - 单引号字符串文字:
titlePage='\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}'
echo "${titlePage}" >> 0.tex
pdflatex 0.tex
字符串中的空格很重要:
'
后立即开始。'
结束。 - 除非您想要终止\n
。-
here-doc选项来剥离前导标签(以便允许缩进以获得视觉清晰度)。答案 2 :(得分:0)
对于这样的东西,你也可以考虑将它从文件本身中取出来。 它还将您的代码与数据分开。 (这就是我经常使用它的原因。)
#!/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
也给(某些)视觉分离。