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

标签 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}

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

如何保存它们?

最佳答案

您丢失了反斜杠和空格,因为 bash(通过其内置的 read)正在评估文本的值 - 替换变量、寻找转义字符(制表符、换行符)等。参见 the manpage一些细节。此外,echo 将合并空格。

就保存它们而言,我不确定您是否可以。您可能会通过执行以下操作来取回反斜杠:

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

应该修改 read 以不尝试计算反斜杠。不过,它可能仍会吞下前导空格。

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

export IFS=

在这种情况下会保留空格。

关于Bash:读取文件时丢失特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11564778/

相关文章:

html - GWAN unescape_html()

php - 转义字符,例如 $ 和 % | MySQL 和 PHP

linux - UNIX shell 脚本,用于从文件运行 grep 命令列表并在单个分隔文件中获取结果

bash - 修剪文件名以仅保留最后 5 个字符

bash - 在 bash 中逐列混合多个文件

jquery - 在 jQuery 中转义斜杠以在 AJAX 请求中传递路径

search - VIM 搜索并替换以美元开头的整个单词

Java - 写入文件时按字面意思转义反斜杠

bash - 检查视频文件的完整性

bash - ubuntu/macos 中的单行打印文件校验和