여기 문서에는 이스케이프 시퀀스가 ​​설명되어 있지 않지만 보간법이 있습니다.

여기 문서에는 이스케이프 시퀀스가 ​​설명되어 있지 않지만 보간법이 있습니다.

이중 백슬래시를 이스케이프 시퀀스로 해석하지 않고 파일을 분류하는 방법이 있습니까?

이 예에서는 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

관련 정보