here document

매개변수 치환하지 않기

# heredoc 앞에 \\를 쓰거나 "EOF"와 같이 감싸면 매개변수 치환이 일어나지 않습니다.
STR=$(cat <<\\EOF
여러줄 쓸수있어요
두번째줄
$0
$PATH
EOF)
  
echo "${STR}"

# 결과 ($가 변수로 해석되지 않는다)
# 여러줄 쓸수있어요
# 두번째줄
# $0
# $PATH

들여쓰기 무시

STR=$(cat <<EOF
여러줄 쓸수있어요
두번째줄
EOF)
  
STR_TAB=$(cat <<-EOF
    <<- 를 쓰면 탭구분도 가능해요
    탭문자를 무시됩니다
    EOF)
  
echo "${STR}"
echo "==========="
echo "${STR_TAB}"

# 결과
# 여러줄 쓸수있어요
# 두번째줄
# ===========
# <<- 를 쓰면 탭구분도 가능해요
# 탭문자를 무시됩니다