Bash:读取文件时丢失了特殊字符

时间:2012-07-19 16:00:57

标签: bash escaping

我有一个包含一些Latex的文件:

\begin{figure}[ht]
 \centering
 \includegraphics[scale=0.15]{logo.pdf}
 \caption{Example of a pdf file inclusion}
 \label{fig:pdfexample}
\end{figure}

我想用bash脚本阅读它:

while read line
  do
    echo $line
  done < "my.tex"

输出

begin{figure}[ht]
centering
includegraphics[scale=0.15]{logo.pdf}
caption{Example of a pdf file inclusion}
label{fig:pdfexample}

为什么我会丢失反斜杠和初始空格?

如何保存它们?

2 个答案:

答案 0 :(得分:20)

您丢失了反斜杠和空格,因为bash(通过其内置读取)正在评估文本的值 - 替换变量,查找转义字符(制表符,换行符)等。有关详细信息,请参阅the manpage。此外,echo将结合空格。

至于保存它们,我不确定你能不能。你可能会通过这样做来获得反斜杠:

while read -r line
  do
    echo $line
  done < "my.tex"

应修改read以不尝试评估反斜杠。尽管如此,它可能仍会吞噬领先的空间。

编辑:将$IFS特殊变量设置为空字符串,如下所示:

export IFS=
在这种情况下,

将导致保留空格。

答案 1 :(得分:0)

您可以将perl用于部分或全部脚本要求吗?

perl -lne 'print;' my.tex

如果您之后必须使用其他工具,那么您可能仍会遇到问题,除非您可以在文件中传递所需的数据。