Подтвердить что ты не робот

Bash: специальные символы, потерянные при чтении файла

У меня есть файл, содержащий некоторый латекс:

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

Я хочу прочитать его в bash script:

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}

Почему я потерял обратную косую черту и начальные пробелы?

Как их сохранить?

4b9b3361

Ответ 1

Вы потеряли обратную косую черту и пробелы, потому что bash (через встроенное чтение) оценивает значение переменных, заменяющих текст, ищет escape-символы (tab, newline) и т.д. См. manpage для некоторых деталей. Кроме того, эхо будет сочетать пробелы.

Что касается их сохранения, я не уверен, что вы можете. Вероятно, вы вернете обратно обратную косую черту:

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

который должен изменить чтение, чтобы не пытаться оценить обратную косую черту. Однако, вероятно, он все еще проглотит ведущие пространства.

Изменить: установка специальной переменной $IFS в пустую строку, например:

export IFS=

приведет к сохранению пробелов в этом случае.

Ответ 2

Можете ли вы использовать perl для части или всех ваших требований script?

perl -lne 'print;' my.tex

Если позже вы должны использовать оболочку для другого инструмента, у вас может быть проблема, если вы не сможете передать необходимые данные в файл.