2009-12-18 13 views

답변

3

Here docs 또는 큰 텍스트 블록을 프로그램으로 쉽게 파이프하는 방법.

2

여기에 문서가 있습니다. 수동에서 :

여기

문서

This type of redirection instructs the shell to read input from the 
current source until a line containing only word (with no trailing blanks) is 
seen. All of the lines read up to that point are then used as the standard 
input for a command. 

The format of here-documents is: 

     <<[-]word 
       here-document 
     delimiter 
3

그것은 비록 배관에 사용되는 것뿐만 아닙니다. 예를 들어 Linux From Scratch 연습에서 사용 된 스크립트는 cat 명령과 출력 리디렉션 연산자 (>)와 함께 heredocs를 광범위하게 사용합니다. EOF를 끝 구분자가 발생되면 < < 사이의 모든 텍스트가 EOF 파일`TEST.C로 구분하고, EOF 끝 구분 기호를 시작할 '및 쓰기

[email protected] ~$ cat >test.c <<EOF 
int main(void){return 0;} 
EOF 
[email protected] ~$ 

: 여기에 그런 일의 예입니다 쉘 프롬프트로 되돌아 간다.

+0

왜이게 낫다 : echo "int main (void) {return 0;}"> test.c? 내가 너를 올바르게 이해한다면 그것은 똑같은 것이다. – Dan

+2

좋지도 나쁘지도 않습니다. 그것은 단지 예일뿐입니다. 그러나 여러 행을 원하거나 따옴표와 함께 문자열을 사용한다고 가정하십시오. heredoc 사용에 찬성하는 주장은 heredoc이 종종 "super quote"처럼 사용되어 필요할 때 "and"문자를 혼합 할 수 있기 때문에 주로이 두 가지를 기반으로합니다. ! ' 큰 따옴표 안에있는 문자가 발견되지 않는 이벤트에 대한 오류를 유발하는 것으로 보이므로 변수 확장과 같은 유용한 기능이 손실 되더라도 작은 따옴표를 사용해야합니다. – Dustin

+1

이 문서의 주된 장점은 긴 문서에 대한 일련의 에코 명령보다 간결하며이 이점의 일환으로 한 줄에 하나의 에코 프로세스 오버 헤드도 방지합니다. –

0

예를 들어 echoread으로 파이프하면 읽기가 하위 쉘에서 실행되기 때문에 변수 할당이 "손실"됩니다. 당신은 현재 쉘에서 실행 확인하기 위해 여기-문서 또는 여기에 문자열을 사용할 수 있습니다

A와 유사하다 당신이 "여기에 문자열"라고 볼 수는 다른 구조의 예입니다
read -a var <<< "some text" 

here-doc.

thisthis을 참조하십시오.