Здесь-документ без интерпретации управляющих последовательностей, но с интерполяцией

Программный пакет - libtool : https://www.gnu. org/software/libtool/

1
08.07.2017, 16:50
2 ответа

Нет, вам не повезло. В руководстве указано:

and \ must be used to quote the characters \, $, and `

Существует обходной путь, используйте несколько здесь -документов:

cat <<\EOF > file.tex
\documentclass[varwidth=true,border=5pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}

\begin{document}
EOF
cat <<EOF >> file.tex
$1
EOF
cat <<\EOF >> file.tex
\end{document}
EOF

Или лучше, если переменная содержит люфт, она не изменяется при расширении:

doc1='\documentclass[varwidth=true,border=5pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}

\begin{document}
'
doc2="$1"
doc3='\end{document}
'
cat <<EOF > file.tex
$doc1
$doc2
$doc3
EOF

Замысловатый способ написания:

doc='\documentclass[varwidth=true,border=5pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}

\begin{document}
'"$1"'
\end{document}
'
printf '%s' "$doc" > file.tex

Это также работает с некоторыми другими примерами:

$ doc='\[\begin{bmatrix} t_{11} & t_{12} & t_{13} & t_{14} \\ t_{21} & t_{22} & t_{23} & t_{24} \\ t_{31} & t_{32} & t_{33} & t_{34} \end{bmatrix}\]'

$ printf '%s\n' "$doc"
\[\begin{bmatrix} t_{11} & t_{12} & t_{13} & t_{14} \\ t_{21} & t_{22} & t_{23} & t_{24} \\ t_{31} & t_{32} & t_{33} & t_{34} \end{bmatrix}\]'

А также, просто чтобы показать, что переменные расширяются только один раз:

$ cat <<EOF
$doc
EOF
\[\begin{bmatrix} t_{11} & t_{12} & t_{13} & t_{14} \\ t_{21} & t_{22} & t_{23} & t_{24} \\ t_{31} & t_{32} & t_{33} & t_{34} \end{bmatrix}\]
1
28.01.2020, 00:52

Используйте cat << \EOF > file.tex. В heredoc не будет расширений параметров или escape-последовательностей.

$ cat t.sh
#!/usr/local/bin/bash
cat << \EOF
testing
\testing
\\testing
EOF
$./t.sh
testing
\testing
\\testing
1
28.01.2020, 00:52

Теги

Похожие вопросы