ここでは、エスケープシーケンスは説明されていませんが、補間があります。

ここでは、エスケープシーケンスは説明されていませんが、補間があります。

二重バックスラッシュをエスケープシーケンスとして解釈せずにファイルを分類する方法はありますか?

この例では、texファイルが生成されます。

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

\\begin{document}
$1
\\end{document}
EOF

バックスラッシュを毎回2回書き込む必要はありませんが、$1まだ通常の値(バックスラッシュも含めることができます)に拡張するようにこれをどのように書くことができますか?

答え1

いいえ、幸運ではありません。マニュアルには次のように記載されています。

そして\〜しなければならない\、$、および文字を引用するために使用されます。

ここに記載されているいくつかの点を使用する解決策があります。

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}\]

答え2

使用cat << \EOF > file.tex。この資料では、パラメータ拡張またはエスケープは解析されません。

$ cat t.sh
#!/usr/local/bin/bash
cat << \EOF
testing
\testing
\\testing
EOF
$ ./t.sh
testing
\testing
\\testing

関連情報