이중 백슬래시를 이스케이프 시퀀스로 해석하지 않고 파일을 분류하는 방법이 있습니까?
이 예에서는 tex 파일이 생성됩니다.
cat <<EOF > file.tex
\\documentclass[varwidth=true,border=5pt]{standalone}
\\usepackage[utf8]{inputenc}
\\usepackage{amsmath}
\\begin{document}
$1
\\end{document}
EOF
백슬래시를 매번 두 번 쓸 필요가 없지만 $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