二重バックスラッシュをエスケープシーケンスとして解釈せずにファイルを分類する方法はありますか?
この例では、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