{{위키데이터 속성 추적}}
[[컴퓨팅]]에서 '''히어 도큐먼트'''(here document, here-document), '''히어 텍스트'''(here-text), '''히어독'''(heredoc), '''히어이즈'''(hereis), '''히어 스트링'''(here-string), '''히어 스크립트'''(here-script)는 파일 [[리터럴]] 또는 [[스트림 (컴퓨팅)|스트림]] 리터럴이다.  마치 별도의 파일인 것처럼 취급하는 [[소스 코드]]의 한 부분이다. 이 용어는 비슷한 문법을 사용하는 여러 줄의 [[스트링 리터럴]]을 구성하기 위해서도 사용되며 텍스트 안의 줄 바꾸기와 기타 공백(들여쓰기 포함)을 보존한다.

히어 도큐먼트는 [[유닉스 셸]]에서 기원하였으며,<ref name=posix/> [[본 셸|sh]], [[C 셸|csh]],<ref>{{웹 인용|url=http://rosettacode.org/wiki/Here_document#C_Shell|title=Here document - Rosetta Code|website=rosettacode.org|language=en|access-date=2017-02-20}}</ref> [[Tcsh]],<ref name=Darwin>{{웹 인용 |url=https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/csh.1.html |제목=Darwin tcsh man page |확인날짜=2019-08-31 |archive-date=2019-07-01 |archive-url=https://web.archive.org/web/20190701120853/https://developer.apple.com/library/archive/documentation/Darwin/Reference/ManPages/man1/csh.1.html |url-status=dead }}</ref> [[콘 셸|ksh]], [[bash]], [[Z 셸|zsh]] 등에서 볼 수 있다. 히어 도큐먼트 스타일의 스트링 리터럴은 다양한 [[고급 프로그래밍 언어]], 특히 [[펄|펄 프로그래밍 언어]](유닉스 셸의 영향을 받은 문법)와 펄에 영향을 받은 언어(예: [[PHP]], [[루비 (프로그래밍 언어)|루비]])에서 볼 수 있다. [[파이썬]], [[Tcl]] 등의 그 밖의 고급 언어들은 다중 라인 스트링을 위한 다른 기능을 제공한다.

히어 도큐먼트는 파일 또는 문자열로 취급이 가능하다. 일부 셸은 이것들을 [[Printf]] 리터럴로 취급하며 이로써 리터럴 내에서 [[변수 (컴퓨터 과학)|변수 치환]]과 [[명령어 치환]]을 가능케 한다.

유닉스 셸에서 기원한 가장 일반적인 히어 도큐먼트 문법은 <code>&lt;&lt;</code>와 그 뒤에 붙는 [[구분 문자]] [[식별자]](종종 [[파일 끝|EOF]] 또는 END<ref name="EOF">{{웹 인용|title=Shell Here Document Overview |url=http://content.hccfl.edu/pollock/ShScript/HereDoc.htm |publisher=hccfl.edu |accessdate=2014-05-28 |author=Wayne Pollock |url-status=dead |archiveurl=https://web.archive.org/web/20140529084958/http://content.hccfl.edu/pollock/ShScript/HereDoc.htm |archivedate=2014-05-29 |df= }}</ref>), 그리고 다음 줄에 인용 텍스트가 시작되며 인용 텍스트를 닫을 때에는 똑같은 구분 문자 식별자가 위치하게 된다. 이러한 문법은 히어 도큐먼트가 스트림 리터럴임을 의미하며 문서의 내용은 선행 명령dml [[표준 스트림|stdin]](표준 스트림)으로 리다이렉트된다. 히어 도큐먼트 문법은 "다음 파일로부터 입력을 받는" <code>&lt;</code>인 입력 [[리다이렉션]] 문법과 유사하다.

다른 언어들은 종종 비슷한 문법을 사용하지만 문법과 실제 기능의 세부 사항은 상당히 다를 수 있다. 단순히 스트링 리터럴을 사용할 때 <code>&lt;&lt;</code>는
인다이렉션(indirection)을 지시하지 않고 시작 구분자를 의미할 수 있다. 루비 등 일부 언어에서 <code>&lt;&lt;</code>는 입력 리다이렉션을 위해 사용되므로 히어 도큐먼트 스트링 리터럴로부터 리다이렉트하고 싶으면 <code>&lt;&lt;</code>를 두 번 사용해야 한다.

== 파일 리터럴 ==
히어 도큐먼트는 파일 리터럴 또는 스트림 리터럴이다. 이는 유닉스 셸에서 기원한 것이지만 비슷한 기능을 다른 일부 언어에서 사용할 수 있다.

=== 유닉스 셸 ===
히어 도큐먼트는 수많은 유닉스 셸에서 사용할 수 있다.<ref name=posix>{{웹 인용 |archiveurl= https://web.archive.org/web/20140427082439/http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_04 |url= http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_04 |archivedate= 2014-04-27 |url-status= live |title= Here-Document description in the POSIX/SUS standard |확인날짜= 2019-08-31 }}</ref> 다음의 예에서 텍스트는 히어 도큐먼트를 사용하여 [[tr (유닉스)|<code>tr</code>]](소문자를 대문자로 변환) 명령어로 전달된다. 셸 파일일 수도 있고 프롬프트에서 직접 상호작용적으로 입력해도 된다.

<syntaxhighlight lang=console>
$ tr a-z A-Z << END_TEXT
> one two three
> four five six
> END_TEXT
ONE TWO THREE
FOUR FIVE SIX
</syntaxhighlight>

<code>END_TEXT</code>가 구분 식별자로 사용되었다. 이는 히더 도큐먼트의 시작과 끝을 규정한다. 리다이렉트와 구분 식별자는 공백으로 분리시킬 필요가 없다:<code>&lt;&lt;END_TEXT</code> 또는 <code>&lt;&lt;&nbsp;END_TEXT</code> 모두 동일하게 잘 동작한다.

== 같이 보기 ==
* [[파이프 (유닉스)]] (파이프에 관한 정보)
* [[스트링 리터럴]]

== 각주 ==
{{각주}}

== 참고 자료 ==
{{참고 자료 시작}}
* ''[https://www.gnu.org/software/bash/manual/bashref.html Bash Reference Manual]''
** [https://www.gnu.org/software/bash/manual/bashref.html#Here-Documents 3.6.6 Here Documents]
** [https://www.gnu.org/software/bash/manual/bashref.html#Here-Strings 3.6.7 Here Strings]
* ''[http://www.tldp.org/LDP/abs/html/index.html Advanced Bash-Scripting Guide],'' Mendel Cooper
** [http://www.tldp.org/LDP/abs/html/here-docs.html Chapter 19. Here Documents]
** [http://www.tldp.org/LDP/abs/html/x17837.html 19.1. Here Strings]
{{참고 자료 끝}}
{{각주|group=lower-alpha}}

== 외부 링크 ==
* [http://rosettacode.org/wiki/Here_document Here document]. Link to [[:en:Rosetta Code]] task with examples of here documents in over 15 languages.

[[분류:프로그래밍 구성체]]
[[분류:문자열]]