Bash 스크립트에 많은 콘텐츠를 어떻게 에코합니까?

Bash 스크립트에 많은 콘텐츠를 어떻게 에코합니까?

나는하고 싶다

echo "[this thing]"

이 일은

\documentclass{article}
\usepackage{rotating}
\usepackage{pdfpages}
\usepackage{verbatim}
\usepackage{amsmath, amsfonts, amssymb, textcomp, mathtools, xparse}
\usepackage[T4, OT1]{fontenc}
\usepackage{graphicx}
\graphicspath{{/Users/Masi/Dropbox/Physiology/images/}}
% Animations cannot be included here
% \addmediapath{ {/Users/Masi/Dropbox/Physiology/animations/} }
\usepackage{newunicodechar}
\usepackage{multirow}
\DeclarePairedDelimiter{\abs}{\lvert}{\rvert}
\DeclarePairedDelimiter{\norm}{\lVert}{\rVert}
\usepackage{color}
\usepackage{hyperref}
\usepackage{media9} % animations swf
\usepackage{Tabbing}
\usepackage{doi, natbib}
\hypersetup{
colorlinks=true,
linkcolor=blue,
citecolor=blue,
allcolors=blue
}
\usepackage[affil-it]{authblk}
\usepackage{import}
\usepackage{color}
\usepackage[normalem]{ulem}
\usepackage{titling} % Two titles in one document
\DeclarePairedDelimiter{\abs}{\lvert}{\rvert}


%%%%%%%%%%%%%%%%%%%%%%%%%%% Question and Answer %%%%%%%%%%%%%%%%%

\usepackage[framemethod=tikz]{mdframed}

\mdfdefinestyle{ans}{
  linecolor=cyan,
  backgroundcolor=yellow!20,
    frametitlebackgroundcolor=green!40,
    frametitlerule=true
}
\newcounter{question}[section]%
\setcounter{question}{0}

\newenvironment{question}[1]{%
\refstepcounter{question}%
    \begin{mdframed}[style=ans,frametitle={Question: #1}]
}{%
    \end{mdframed}%
}%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%% Smaller things

\newtheorem{case}{Case logic}
\mdfdefinestyle{que}{
  linecolor=cyan,
  backgroundcolor=cyan!20,
}
\surroundwithmdframed[style=que]{case}

\newtheorem{sidenote}{Sidenote}
\mdfdefinestyle{que}{
  linecolor=cyan,
  backgroundcolor=cyan!20,
}
\surroundwithmdframed[style=que]{sidenote}


\newtheorem{citation}{Citation}
\mdfdefinestyle{que}{
  linecolor=cyan,
  backgroundcolor=yellow!20,
}
\surroundwithmdframed[style=que]{citation}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%




\newtheorem{theorem}{Theorem}
\newtheorem{proposition}[theorem]{Proposition}
\newenvironment{definition}[1][Definition]{\begin{trivlist}
\item[\hskip \labelsep {\bfseries #1}] \emph}{\end{trivlist}}
\providecommand{\keywords}[1]{\textbf{Keywords:} #1}


%%%%%%%%%%%%%%%%%%%%%%%%% Counter Section %%%%%%%%%%%%%%%%%%%%%%
\makeatletter
  \def\@part[#1]#2{%
    \ifnum \c@secnumdepth >\m@ne
      \refstepcounter{part}%
    \fi
    \addcontentsline{toc}{part}{#1}%
    {\parindent \z@ \raggedright
     \interlinepenalty \@M
     \normalfont
     \LARGE \bfseries #2%
     \markboth{}{}\par}%
    \nobreak
    \vskip 3ex
    \@afterheading}
\@addtoreset{section}{part}    
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

이렇게 큰 콘텐츠를 Bash 파일에 어떻게 잘 반영할 수 있나요?

답변1

사용여기 문서:

cat <<'EOF'
Data...
EOF

참고: 물론 확장을 원하지 않는 한 EOF데이터에 백슬래시와 같은 것이 포함되어 있는 경우 확장을 피하기 위해 위와 같이 heredoc 단어( )를 인용하는 것이 좋습니다 . $foo예:

$ cat <<EOF
$SHLVL \\
EOF

다음과 같은 것을 제공합니다:

3 \

~하는 동안

$ cat <<'EOF'
$SHLVL \\
EOF

다음을 제공합니다:

$SHLVL \\

답변2

@vinc17 답변은 정확하지만 불완전합니다. HEREDOC 접근 방식은 훌륭하지만 순진하게 사용할 수는 없습니다. 보다https://stackoverflow.com/a/11379627/763269더 많은 것을 알아두세요.

HEREDOC 블록에서 생각하는 것처럼 삽입된 공백과 탭은 유지되지 않습니다. HEREDOC 마커(일반적으로 EOF)는 쉘 확장을 방지하기 위해 작은따옴표로 묶어야 합니다. 다른 HEREDOC 블록을 포함하는 HEREDOC 블록(예: 스크립트를 생성하는 경우)에는 많은 문제가 있습니다. HEREDOC 블록의 내용을 base64로 인코딩하고 확장하면 이러한 모든 문제를 피할 수 있습니다.

답변3

내 라텍스가 별로 좋지 않은데, 본문에 변수를 설정해주나요? 그렇지 않으면 라텍스를 추가 템플릿 파일에 넣고 cat을 사용하여 인쇄합니다. 이렇게 하면 언젠가 템플릿을 교체하려는 경우 유지 관리가 더 쉬워집니다.

관련 정보