[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"
결과