[Shell Script] 히어 도큐먼트

 도큐먼트에서 변수를 확장하지 않고 그대로 $str처럼 표기 하기 


도큐먼트 본체에 `(그레이브)를 $나 사용하는데 확장 하지 않고 그대로 출력하고 싶을 때 사용합니다 . 
#!/bin/sh

# 이 변수는 확장 x 실제로 사용되지 않음

str="Dummy"

#1
cat << 'EOT'        
여기는 히어 도큐먼트 본체 입니다 .
이 부분에 적힌 문자열은 명령어 표준 출력에
직접 리다이렉트 됩니다 .

종료 문자열을 작은 따옴표 기호로 감싸면
$str이라고 적어도 변수가 확장되지 않으며
`echo abc`도 치환되지 않습니다 .
EOT





결과






해설

이 스크립트는 히어 도큐먼트를 사용할 때 파라미터 확장이나 명령어 치환을 하지 않습니다 . 
히어 도큐먼트란 셸 스크립트 본체에 포함된 텍스트를 스크립트 내부 명령어 표준입력으로 사용하는 기능입니다 . 


히어 도큐먼트를 사용하는 방법은 다음과 같습니다 .



(명령어) << (종료 문자열)
히어 도큐먼트 본체 
---
종료 문자열 






  • 종료 문자열은 히어 도큐먼트 본체에 나오지 않는 문자열이면 뭐든지 상관 없습니다 . 
  • 관용적으로 END, EOT, EOF 가 자주 사용됩니다 . 

히어 도큐먼트에서는 파라미터 확장과 명령어 치환이 일어납니다 . 즉, $기호와 ' ' 기호는 특별한 의미가 있어서 변수 $str은 변숫값으로 확장됩니다 . 

#1처럼 작은 따옴표로 감싸서 'EOT'라고 작성하면 히어 도큐먼트 본체의 파라미터 확장이나 치환을 막아서 $ 기호나 `기호를 포함한 텍스트를 그대로 취급할 수 있습니다 .


파라미터 확장 제어

히어 도큐먼트안에 파라미터를 확장하고 싶은 변수와 그렇지 않은 변수가 섞여 있을 수도 있습니다 . 그럴 때는 따로 변수를 이스케이프 하여 대응합니다 . 
#!/bin/sh

string="Hello"
cat << EOT
이 변수는 확장 됩니다 . $string
이 변수는 확장되지 않습니다 . \$string
EOT


  • 첫 번째 셸 변수 $string은 이스케이프하지 않았으므로 확장됩니다. 
  • 두 번째 \$string으로 $기호를 이스케이프 하므로 $string이라는 문자열을 의미 합니다 . 






히어 스트링 

  • bash에는 히어도큐먼트(<<)와 닮은 히어 스트링(<<<)이 있습니다 . 
  • 더 간결하게 포함된 텍스트를 셸 스크립트에 작성할 수 있습니다
#!/bin/bash

string="hello"

#포함된 문자열은 큰따옴표로 감싸면 됩니다 .

cat <<< "인사 예제
안녕하세요.
$string
Ni-hao"

결과