2014-05-07 72 views
1

如何在不需要轉義特殊字符的情況下將文本存儲在Bash這裏的文檔中?例如,我怎麼能修改下面的腳本,以維護LaTeX的代碼?:避免在Bash這裏逃脫文檔

#!/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 

回答

3

問題不在於這裏的文檔,而是因爲read解析它的輸入。使用read -r應該有所幫助;或者如果你真的只想要這裏的文檔在一個文件中,cat <<'here' >file

0

對於這樣的東西,你也可以考慮sedding出來的文件本身。 它也將您的代碼與數據分開。 (這就是爲什麼我經常用它。)

#!/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 

這也給了(某些)目視間隔。

2

免責聲明:

  • @tripleee's answer正確的和簡單的解決方案。
  • 雖然此答案始終有效,但它最初包含錯誤的索賠。現在它只是一個替代解決方案。

由於變量被分配到這裏,另一種解決方案使用常規的 -​​ 但多 - 單引號字符串字面

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選項去掉前導標籤(以便爲了視覺清晰而允許縮進)不適用於此方法。