여기 문서
Here document컴퓨팅에서 여기 문서(여기 문서, 여기 텍스트, 세레독, 여기 문자열 또는 여기 스크립트)는 파일 리터럴 또는 입력 스트림 리터럴입니다.이것은 별도의 파일과 같이 취급되는 소스 코드 파일의 섹션입니다.이 용어는 유사한 구문을 사용하여 텍스트의 줄 바꿈 및 기타 공백( 들여쓰기 포함)을 보존하는 여러 줄 문자열 리터럴의 형식에도 사용됩니다.
여기에서는 Unix [1]쉘에서 작성되며 Bourne 쉘에서 찾을 수 있습니다.sh
, C 쉘 (csh
,[2] tcsh (tcsh
,[3] KornShell ( )ksh
Bourne Again Shell ( )bash
및 Z 쉘( )zsh
).여기서 문서 스타일의 문자열 리터럴은 다양한 고급 언어, 특히 Perl 프로그래밍 언어(유닉스 셸에서 영감을 받은 구문), PHP 및 Ruby와 같은 Perl의 영향을 받은 언어에서 볼 수 있습니다.JavaScript는 또한 6차 개정판(ES6)에 추가된 기능인 템플릿 리터럴을 통해 이 기능을 지원합니다.Python, Julia 및 Tcl과 같은 다른 고급 언어에는 여러 줄의 문자열을 위한 다른 기능이 있습니다.
여기서 문서는 파일 또는 문자열로 처리할 수 있습니다.일부 셸은 이들을 형식 문자열 리터럴로 취급하여 리터럴 내에서 변수 치환 및 명령 치환을 허용합니다.
Unix 쉘에서 발신된 문서의 가장 일반적인 구문은 다음과 같습니다.<<
그 뒤에 딜리미터 식별자(종종 EOF 또는[4] END라는 단어)가 이어지며, 그 다음 줄에서 따옴표로 묶이는 텍스트가 이어지며, 그 다음 줄에서 동일한 딜리미터 식별자로 닫힙니다.이 구문은 여기서 문서가 공식적으로 스트림 리터럴이고 문서의 내용이 이전 명령의 stdin(표준 입력)으로 리디렉션되기 때문입니다. 여기서 문서 구문은 입력 리다이렉션을 위한 구문과 유사합니다.<
"다음 파일에서 입력을 받습니다."
다른 언어에서도 대부분 유사한 구문을 사용하지만 구문과 실제 기능의 세부 사항은 크게 다를 수 있습니다.단순히 현악 리터럴에 사용할 경우,<<
는 간접을 나타내는 것이 아니라 단순히 시작 딜리미터 표기법일 뿐입니다.루비 같은 언어에서는<<
입력 리다이렉션에도 사용되므로<<
여기서 문서 문자열 리터럴에서 리다이렉트하려면 두 번 사용됩니다.
파일 리터럴
좁게 말하면, 여기 문서는 파일 리터럴 또는 스트림 리터럴입니다.이러한 기능은 Unix 쉘에서 시작되지만 일부 다른 언어에서도 유사한 기능을 사용할 수 있습니다.
Unix 쉘
여기에서는 많은 Unix [1]쉘에서 문서를 사용할 수 있습니다.다음 예제에서는 텍스트가 여기서 문서를 사용하여 명령어로 전달됩니다(소문자를 대문자 변환).이는 셸 파일에 있을 수도 있고 프롬프트에서 대화식으로 입력할 수도 있습니다.
$ LANG=C tr a-z A-Z < 엔드> 1 2 3 > 4 Five 6 > 엔드 원 2 3 4 Five 6
END
구분 식별자로 사용되었습니다.이 문서의 시작과 끝을 지정했습니다.리다이렉트와 구분 식별자는 공백으로 구분할 필요가 없습니다.<<END
또는<< END
둘 다 똑같이 잘 작동합니다.
기본적으로는 변수 이름이 값으로 대체되거나 백틱 내의 명령이 평가되는 [a]등 큰따옴표 내용과 거의 동일합니다.
$ cat << EOF > \$ 현용 dir "$PWD" 'pwd' > EOF $ 현용 dir "/home/user" /home/user
이것은 라벨의 임의의 부분을 따옴표로 묶는 것으로 무효로 할 수 있습니다.따옴표 없는 [b]값으로 끝납니다.이 동작은 내용이 작은 따옴표로 묶인 경우와 기본적으로 동일합니다.예를 들어, 작은 따옴표로 설정합니다.
$ cat < < ' EOF ' > \ $ 현용 dir " $ PWD " " pwd " > EOF \ $ 현용 dir " $ PWD " pwd "
큰따옴표를 사용할 수도 있지만, 이중따옴표로 묶인 문자열에서는 확장이 수행되지만 이중따옴표로 묶인 [5]딜리미터가 있는 여기서 문서에서는 수행되지 않기 때문에 혼동될 수 있습니다.단일 따옴표로 묶은 딜리미터와 이중 따옴표로 묶은 딜리미터는 일부 다른 언어(특히 Perl)(아래 참조)에서 구별됩니다.이 경우 동작은 대응하는 문자열 따옴표와 평행합니다.
csh/tcsh 이외의 POSIX 쉘에서는 마이너스 부호를 붙입니다.<<
(즉,<<-
)는 선행 탭이 [3]무시되는 효과가 있습니다.이렇게 하면 [c]값을 변경하지 않고 셸 스크립트로 문서를 들여쓸 수 있습니다(주로 기존 들여쓰기와 정렬하기 위해).
다음을 포함하는 스크립트:
LANG=C tr a-z 포괄적인<><><>-END_TEXT 여기 선생님,<>-단일 공백 문자(i.e. 0x20)은 이 선의 이 길 하나의 TAB을 캐릭터와 0x09하 END_TEXT 그 대상 최종 끝나는 다음 줄을 서 있었기 전에 이 라인 에코와 이tr 메아리에 의해 처리되지 않었다 +++++++++++++++ LANG=C tr a-z 포괄적인<>i.e이 시작되는 시작을 잘합니다;.<>END_TEXT 여기독<>, <. 어떤 공백 문자(i.e. 0x20)이 선의 이 길 하나의 TAB을 캐릭터와 이 라인 전에 0x09하 END_TEXT 그 대상 최종 끝나는 다음 줄 서 있었어, 에코 i.e 때문 delimiting 식별자와 통화한 TAB으로 시작하고tr 명령 contin을 인정 받지 않은 것은 시작되는 시작 때 하게 된다.prued과중
생산:
제 주변에<SOCIAL,<>-싱글 가진 오피스 스페이스 성격(I.E. 0X20)으로 전송 인터페이스의 새 삶을 시작한 ATAS는 대상 최종 이 라인 전이었다 THENEXT 인터페이스 하고 싶지 않은 독자 이 데이터 전송 인터페이스 A싱글 TAB성격 면역 단위 0X09 함께 BEGINS고 이 tr에서 처리되지 않았 +++++++++++++++는 엄연한 HERE 상무부가<>SOCIAL;< 싱글 가진 오피스 스페이스 성격(I.E. 0X20)T의 새 삶을 시작한 AT는 엄연한 DOCHISLINE THIS 행은 단일 탭 문자로 시작합니다.즉, 0X09는 다음 행 end_text 에코입니다.원하는 엔드는 이 행, 에코 앞에 있었습니다만, 구분 식별자가 있는 행은 탭으로 시작되어 인식되지 않았습니다.
다른 용도는 파일로 출력하는 것입니다.
$ cat << EOF > ~/test File001 >는 이 텍스트 앞에 3스페이스가 있습니다.> 1개의 탭 문자가 이 행의 선두에 표시됩니다.이 텍스트 EOF 앞에는 아무것도 없습니다.
여기 문자열이 있습니다
여기서 문자열(bash, ksh 또는 zsh로 사용 가능)은 구문적으로 유사하며 다음과 같이 구성됩니다.<<<
는 단어로부터의 입력 리다이렉션에 영향을 줍니다(이 컨텍스트에서는 일반적으로 문자열 리터럴로 셸에 의해 단위로 취급되는 시퀀스).이 경우 일반적인 셸 구문이 단어("여기서 문자열 구문")에 사용되며 유일한 구문은 리다이렉션입니다.여기 문자열은 입력 리다이렉션에 사용되는 일반 문자열로 특별한 종류의 문자열은 아닙니다.
따옴표를 붙일 필요는 없습니다.
$ LANG=C tr a-z A-Z << 1 ONE >
공백이 있는 문자열의 경우 따옴표로 묶어야 합니다.
$ LANG=C tr a-z A-Z << '1 2 3' 1 2 3
이것은 다음과 같이 쓸 수도 있습니다.
$foo='one two three' $ LANG=C tr a-z A-Z << "$foo" 원투 쓰리
여러 줄의 스트링을 사용할 수 있으며, 다음과 같은 결과를 얻을 수 있습니다.
$ LANG=C tr a-z A-Z << ' 1 > 2 3 > 1 、 2 3
선행 및 후행 새 행(있는 경우)이 포함되어 있습니다.
$ LANG=C tr a-z A-Z << ' > 1 > 2 > 3 > '원 투 쓰리'
여기서의 문서와의 주요 차이점은 여기서의 문서에서는 딜리미터가 다른 행에 있고 선두와 후행의 새 행이 제거된다는 것입니다.여기 문서와 달리 여기 문자열은 구분 기호를 사용하지 않습니다.
여기서의 문자열은 계산기와 같이 짧은 입력을 자주 받는 명령어에 특히 유용합니다.bc
:
bc << 2^10 1024
여기서 스트링 동작은 파이프와 를 통해서도 실행할 수 있습니다(순서의 역방향).echo
명령어(예:
$ 에코 '원 투 쓰리' LANG=C tr a-z 원 투 쓰리
단, 여기서 설명하는 문자열은 최신 프로세스에서 마지막 명령을 실행할 필요가 있을 때 특히 유용합니다.read
내장:
$ echo 'one two three' read -r a b c $echo "$a $b $c"
아무것도 산출하지 않는 반면
$ read - r a b c << ' one two three' $echo "$a $b $c" 1 2 3
이는 앞의 예에서 배관이 다음을 야기하기 때문에 발생합니다.read
하위 프로세스에서 실행되므로 상위 프로세스 환경에 영향을 줄 수 없습니다.
Microsoft NMAKE
Microsoft의 경우NMAKE, 여기서는 인라인 파일이라고 부릅니다.인라인 파일은 다음과 같이 참조됩니다.<<
또는<<pathname
: 첫 번째 표기법은 임시 파일을 만들고 두 번째 표기법은 지정된 경로 이름의 파일을 만듭니다(또는 덮어씁니다).인라인 파일은 다음과 같이 종료됩니다.<<
행 자체에서 임의로 (대문자와 소문자를 구분하지 않음)키워드에 이어KEEP
또는NOKEEP
작성한 파일을 보관해야 하는지 여부를 나타냅니다.
target0:dependent0 command0 << temporaryinline file ><< target 1 : dependent 1 command 1 << 일시적이지만 preserved inline file... << 보관 유지 target2:dependent2 command2 << discardedinline file > << 보관 없음 target3:dependent3 command3 <<target3 namedinline file... << 보관 유지
R
R에는 파일 리터럴이 없지만 문자열 리터럴과 문자열 투 파일 함수를 조합하여 동등한 기능을 제공합니다.R은 문자열에서 줄바꿈을 포함한 임의의 공백을 허용합니다.그런 다음 문자열을 파일 기술자로 변환할 수 있습니다.textConnection()
기능.예를 들어, 다음은 소스 코드에 포함된 데이터 테이블을 데이터 프레임 변수로 변환합니다.
스트레이트 <-> "주정부 인구 소득 문맹 생활"Exp Murder HS.그라드 프로스트 앨라배마 3615 3624 2.1 69.05 15.1 41.3 20 알래스카 365 6315 1.5 69.31 11.3 66.7 152 애리조나 2212 4530 1.8 70.55 7.8 58.1 15 아칸소주 2110 3378 1.9 70.66 10.1 39.9 65인치 x <-> 읽기.표(텍스트 연결(스트레이트), 머리글자=진실의, row.names(이름)=1)
데이터 세그먼트
Perl과[6][7] Ruby는 파일 리터럴의 형태를 가지고 있으며, 이는 데이터 세그먼트의 형태로 간주될 수 있습니다.이러한 언어에서는 다음 행이 포함됩니다.__DATA__
(페를) 또는__END__
(Ruby, old Perl)은 코드 세그먼트의 끝과 데이터 세그먼트의 시작을 나타냅니다.이 행 앞의 내용만 실행되고 다음 행 뒤의 소스 파일의 내용은 파일 개체로 사용할 수 있습니다.PACKAGE::DATA
Perl(예:main::DATA
)와DATA
루비로.인라인 파일로서, 스크립트당 하나만 있을 수 있지만, 이 문서들은 의미론적으로 여기 문서와 유사합니다.그러나 이러한 언어에서 "여기 문서"라는 용어는 아래에서 설명하는 것과 같이 여러 줄의 문자열 리터럴을 나타냅니다.
데이터 URI 스킴
Data URI 스킴에서 자세히 설명했듯이 모든 주요 웹 브라우저는 data:로 시작하는 URI를 여기서와 같이 이해하고 있습니다.
여러 줄의 문자열 리터럴
"여기 문서" 또는 "여기 문자열"이라는 용어는 다양한 프로그래밍 언어, 특히 Perl(유닉스 셸의 영향을 받은 구문), Perl의 영향을 받은 언어, 특히 PHP와 Ruby에 사용됩니다.조개껍데기<<
입력 리다이렉트에는 사용되지 않지만 구문은 유지되는 경우가 많습니다.
Perl의 영향을 받았다
펄
Perl에서는 여기서 문서를 [8]호출하는 방법이 몇 가지 있습니다.태그 주위의 딜리미터는 일반 문자열 리터럴과 같은 효과를 가집니다.예를 들어 태그 주위에 큰따옴표를 사용하면 변수를 보간할 수 있지만 작은따옴표를 사용하면 보간할 수 없으며, 태그를 사용하지 않고 큰따옴표처럼 작동합니다.태그 주위의 구분자로 backtick을 사용하면 셸 스크립트로 세습의 내용이 실행됩니다.끝 태그가 행의 선두에 있는지 확인해야 합니다.그렇지 않으면 태그가 인터프리터에 의해 인식되지 않습니다.
여기서 설명하는 문서는 태그에서 시작하는 것이 아니라 다음 행에서 시작합니다.따라서 태그를 포함하는 문장은 태그 뒤에 계속됩니다.
큰따옴표로 묶은 예를 다음에 나타냅니다.
나의 $140 = 뱀파이어 슬레이어 버피; 나의 $140 = 스파이크; 인쇄물 <<」끝."; $수신자님께, 서니데일을 떠나 다시는 돌아오지 않길 바란다 그다지 사랑하진 않지만 $140 끝.
출력:
스파이크에게, 난 네가 서니데일을 떠나 다시는 돌아오지 않기를 바란다.뱀파이어 슬레이어 버피
다음은 작은 따옴표로 묶은 예입니다.
인쇄물 <<< >끝.'; $수신자님께, 서니데일을 떠나 다시는 돌아오지 않길 바란다 그다지 사랑하진 않지만 $140 끝.
출력:
$recipient에게, 저는 당신이 Sunnydale을 떠나 다시는 돌아오지 않기를 바랍니다.Not Creatly Love, $sender
또한 backticks의 예(휴대용일 수 있음)도 있습니다.
나의 $shell_script_stdout = << >'종료; 메아리치다 후우 메아리치다 막대기 끝.
같은 회선상에서 복수의 유전체를 개시할 수 있습니다.
말합니다(<< >시작한다. . "이것이 가운데\n" . << >끝.); 이것. 이 그 시작: 시작한다. 그리고. 지금이다 그것 이 에 걸쳐서! 끝. # 이는 다음과 같습니다. 말합니다("이것이 시작입니다.\n이 중간이고 이제 끝이야!\n");
태그 자체에는 공백이 포함될 수 있으며, 이를 통해 들여쓰기를 중단하지 않고 세습을 사용할 수 있습니다.
말합니다 << >'종료'; 안녕 세계 끝.
Perl 버전 5.26 [9]이후로는 다음과 같은 표시를 포함할 수 있습니다.
#"Hello there\n"을 선두 공백 없이 출력합니다. 한다면 (1) { 인쇄물 <<~EOF; 안녕 거기. EOF }
이러한 문자열 외에 Perl은 파일 리터럴, 즉 다음 파일의 내용도 제공합니다.__DATA__
(기존의__END__
)를 사용해 주세요.파일 개체로 액세스할 수 있습니다.PACKAGE::DATA
예를 들어main::DATA
데이터 세그먼트의 한 형태로 볼 수 있습니다.
PHP
PHP에서는 여기서 문서를 세레독이라고 부릅니다.PHP에서 세습은 문자열 리터럴이 아닙니다.세레독 텍스트는 큰따옴표가 없는 큰따옴표 문자열과 동일하게 동작합니다.예를 들어, 의미 "$"는 변수 시작, "${" 또는 "{$"는 복잡한 변수 시작으로 해석됩니다.
<?개요 이름 = 조 스미스; $점유율 = "프로그래머"; 메아리치다 <<<< >EOF 이건 유전적인 부분이야 자세한 내용은 현지 $직업 $name으로 문의하시기 바랍니다. 감사합니다! EOF; $to프린트 = <<<< >EOF 안녕하세요 $name!실제로 변수에 유전 섹션을 할당할 수 있습니다! EOF; 메아리치다 $to프린트; ?>
출력
이건 유전적인 부분이야자세한 내용은 지역 프로그래머 조 스미스에게 문의하십시오.감사합니다!안녕, 조 스미스!실제로 변수에 유전 섹션을 할당할 수 있습니다!
7.3 이전 버전의 PHP에서는 종료 식별자를 포함하는 행에 세미콜론을 제외한 다른 문자를 포함할 수 없습니다.그렇지 않으면 종료 식별자로 간주되지 않고 PHP가 계속 찾습니다.적절한 종료 식별자를 찾을 수 없는 경우 스크립트의 마지막 행에서 해석 오류가 발생합니다.단, 버전 7.3부터는 종료 ID 뒤에 세미콜론 또는 줄바꿈을 붙일 필요가 없어졌습니다.또한 닫기 식별자를 들여쓸 수 있습니다. 이 경우 문서 [10]문자열의 모든 줄에서 들여쓰기가 제거됩니다.
Perl과 같이 PHP 5.3 이후에서는 태그를 작은 따옴표로 둘러싸서 변수를 보간하지 않을 수 있습니다.이것을 [11]nowdoc이라고 부릅니다.
x달러 = <<<<>>끝.' $수신자님께, 서니데일을 떠나 다시는 돌아오지 않길 바란다 그다지 사랑하진 않지만 $140 끝.;
PHP 5.3+에서는 태그에 큰따옴표를 붙이는 것도 가능합니다.Perl과 마찬가지로 태그에 아무것도 붙이지 않는 것과 같은 효과가 있습니다.
루비
다음 루비 코드는 여기 문서를 사용하여 식료품 목록을 표시합니다.
놓다 << >식료품_리스트 식료품 목록 ---- 1. 샐러드 믹스 2. 딸기* 3. 시리얼 4. 우유* * 유기농 식료품_리스트
그 결과:
루비 식료품 목록.rb 식료품 목록 -------------------------------------------------------------------------------------------* 3. 시리얼 4. 우유.* * 유기농
그<<
입력 리다이렉션을 나타내는 것은 아니지만, 루비도<<
입력 리다이렉트에서는, 여기서의 파일로의 리다이렉트에는,<<
두 번, 다른 의미로:
파일::열다.("상세 목록", "w") 하다 f f << > << >식료품_리스트 식료품 목록 ---- 1. 샐러드 믹스 2. 딸기* 3. 시리얼 4. 우유* * 유기농 식료품_리스트 끝.
Unix 쉘과 마찬가지로, Ruby는 이 문서의 시작 부분이 약간 다른 스타터로 표시되어 있는 경우 구분 식별자가 줄의 첫 번째 열에서 시작되지 않도록 허용합니다.<<-
또한, Ruby는 여기서 문서를 이중 따옴표로 묶은 문자열로 취급하기 때문에,#{}
코드를 삽입하기 위해 구성합니다.다음 예시는 이들 기능을 모두 나타내고 있습니다.
지금이다 = 시간을.지금이다 놓다 <<->EOF #{지금}입니다.존, 아이들은 어디 있어요? EOF
Ruby는 다음 문서에서 "<~" 구문을 생략하여 이를 확장합니다.
놓다 <<~EOF 이 행은 두 칸 들여쓰기로 되어 있습니다. 이 행은 네 칸 들여쓰기로 되어 있습니다. 이 줄은 여섯 칸 들여쓰기로 되어 있다. EOF
모든 행에서 두 공백의 공통 들여쓰기가 생략됩니다.
$ruby intended-erdoc.rb 이 행은 두 칸으로 들여씁니다. 이 행은 네 칸 들여쓰기로 되어 있습니다. 이 줄은 여섯 칸 들여쓰기로 되어 있다.
Perl과 마찬가지로 Ruby는 여러 개의 문서를 한 줄로 시작할 수 있습니다.
놓다 << >시작한다. + "<---중간 --->\n" + << >끝. 이것이 시작입니다. 시작한다. 그리고 이제 다 끝났어! 끝. # 이 식은 다음과 같습니다. 놓다 "이것이 시작입니다.\n<---중간 --->\n그리고 이제 끝이다!"
Perl과 마찬가지로, Ruby는 파일 리터럴, 즉 다음 파일 내용을 특징으로 합니다.__END__
줄에 서 있는 것.파일 개체로 액세스할 수 있습니다.DATA
데이터 세그먼트의 한 형태로 볼 수 있습니다.
파이썬
Python은 "verbatim" 문자열로 여러 줄 문자열을 지원합니다.
인쇄물(""" 고객:치즈 가게가 별로 없지? 점주:이 지역에서 최고입니다, 선생님. """)
Python 3.6 이후, 말 그대로 f-string은 변수와 식 보간을 지원합니다.
shop_type = "치즈" 칭찬하다 = "실패" 인쇄물(f""" 고객:별것 아니다{shop_type.더 낮게()}가게에요? 점주:{칭찬하다.대문자로 하다()}그 구역에서요, 선생님. """)
C++
C++11 이므로 C++ 는 커스텀 딜리미터로 스트링 리터럴을 지원합니다.
컨스턴트 차* 스트레이트 = R"custom_communications()문자열의 시작입니다.새 라인 slash \ quote " ' parens ) (문자열 끝)) custom_communications(커스텀)"; 인쇄물(%s, 스트레이트);
출력하다
문자열의 시작입니다.새 줄 슬래시 \ 따옴표 " ' parens ) (문자열 끝)
D
버전 2.0 이후 D는 'q' 접두사를 사용하는 문서 형식의 문자열을 지원합니다.이 문자열은 로 시작합니다.q"IDENT
(임의의 ID ID의 경우) 줄 바꿈 직후에 행이 표시됩니다.IDENT"
줄의 선두에
인트 주된() { 스트링 목록. = q아이덴티티 1. 아이템1 2. 항목 2 3. 항목 3 식별"; 기입하다( 목록. ); }
또한 D는 유사한 구문을 가진 따옴표 구분자를 몇 개 지원하며 이러한 문자열은 다음과 같습니다.q"[
으로 끝나다]"
또는 다른 딜리미터 문자([] <> {} 또는 [] 중 하나)에 대해서도 마찬가지입니다.
OS/JCL
이전 MVS 및 현재 z/OS 운영 체제에서 사용되는 IBM의 JCL(Job Control Language)에서 작업 스트림에 인라인으로 연결된 데이터는 다음과 같은 DD 문장에서 *로 식별할 수 있습니다.//SYSIN DD *
또는//SYSIN DD *,DLM=text
첫 번째 경우 텍스트 행은 뒤에 이어지며 DD 이름이 SYSIN인 의사 파일로 결합됩니다.명령어에 이은 모든 레코드는 다른 OS/JCL 명령어가 발생할 때까지 결합됩니다(다음으로 시작하는 행).//
디폴트 EOF 시퀀스(/*
)가 발견되거나 데이터의 물리적인 끝이 발생합니다.두 번째 경우, DLM= 피연산자를 사용하여 데이터 스트림에 JCL이 포함된 경우 사용할 수 있는 데이터의 텍스트 문자열 신호 전달 끝을 지정한다는 점을 제외하면 조건은 동일합니다.//
또는/*
시퀀스(C 또는 C++ 소스 코드의 코멘트 등).다음은 어셈블러에 인라인 데이터로 제공되는 어셈블리 언어 프로그램을 컴파일 및 실행합니다.
//아하 일 ('알렉스) // EXEC ASMLG //시스템DD* APROG 시동 XR 15, 15 BR 14 끝. /* //* 작업 종료
그//SYSIN DD *
스테이트먼트는 기능적 등가물입니다.<</*
데이터 스트림이 다음과 같이 종료됨을 나타냅니다./*
.
라켓
라켓은 여기서부터 시작한다#<<
그 [12]뒤에 문자열의 터미네이터를 정의하는 문자가 표시됩니다.문자열의 내용에는 다음 중 하나까지의 모든 문자가 포함됩니다.#<<
지정된 터미네이터가 유일한 콘텐츠인 회선 및 회선.보다 정확하게는 문자열의 내용은 다음 줄에 이어지는 새 행 뒤에 시작됩니다.#<<
는, 종단자 뒤에 이어지는 새로운 행 앞에 끝납니다.
#실패하다라켓 (표시 #<여기 문자열 이것은 라켓의 간단한 문자열입니다. * 1개 * 2개 * 3개 스트링 )
출력:
이것은 라켓의 간단한 문자열입니다.* 하나 * 둘 * 셋
시작 행과 끝 행 사이에 이스케이프 시퀀스는 인식되지 않습니다.모든 문자는 문자 그대로 문자열(및 터미네이터)에 포함됩니다.
#실패하다라켓 (표시 #< 라켓의 끈 ☺ 이 문자열은 여러 줄에 걸쳐 있습니다. Unicode 기호를 포함할 수 있습니다. 그래서 ,, ☠, α, β는 다 괜찮아요. 다음 줄에는 터미네이터가 나옵니다.유니코드 기호도 포함할 수 있습니다.스페이스나 스마일리도 포함할 수 있습니다. 라켓의 여기 스트링 ☺ )
출력:
이 문자열은 여러 줄에 걸쳐 있으며 임의의 Unicode 기호를 포함할 수 있습니다.그래서 ,, ☠, α, β는 다 괜찮아요.다음 줄에는 터미네이터가 나옵니다.유니코드 기호도 포함할 수 있습니다.스페이스나 스마일리도 포함할 수 있습니다.
여기에서는, 통상의 스트링이 다음과 같은 컨텍스트에서 통상의 스트링을 사용할 수 있습니다.
#실패하다라켓 (인쇄물 #<종료 ~a님, 통찰력 있는 대화 감사합니다~a. ~a 끝. 아이작 "실패" 칼)
출력:
아이작에게, 어제 통찰력 있는 대화를 해주셔서 감사합니다.칼
흥미로운 대안은 언어 확장자를 사용하는 것이다.at-exp
@-[13]commendions를 씁니다.다음과 같습니다.
#lang at-exp racket
( displayln @string-append { 이것은 긴 문자열로 긴 텍스트 청크가 필요할 때 매우 편리합니다.'인용어'나 '회피어'에서 벗어날 걱정은 없습니다.,, ,, ,, ...도 괜찮습니다.코드 포함:@(number->string (+ 3 4))
})
출력:
이것은 긴 문자열로 긴 텍스트 청크가 필요할 때 매우 편리합니다.'인용어'나 '회피어'에서 벗어날 걱정은 없습니다.,, ,, ,, ...도 괜찮습니다.삽입 코드: 7
@-expression은 문자열에 한정되지 않으며 나머지 언어와 함께 구성할 수 있는 구문 형식입니다.
Windows PowerShell
Windows PowerShell에서는 여기서 설명하는 문서를 여기서 설명하는 문자열이라고 합니다.here-string은 오픈 딜리미터( )로 시작하는 문자열입니다.@"
또는@'
and 、 [ Close Delimiter ]으로 끝납니다("@
또는'@
)는, 행 자체를 사용해, 스트링을 종료합니다.오픈 딜리미터와 클로즈 딜리미터 사이의 모든 문자는 문자열 리터럴로 간주됩니다.여기에 큰따옴표가 있는 문자열을 사용하면 변수를 해석할 수 있지만 작은따옴표는 사용할 수 없습니다.변수 보간은 단순한 변수와 함께 발생합니다(예:$x
하지만 아니다$x.y
또는$x[0]
) 일련의 스테이트먼트를 실행할 수 있습니다.$()
(예:$($x.y)
또는$(Get-Process Out-String)
).
다음 PowerShell 코드에서 텍스트는 여기서 설명하는 문자열을 사용하여 함수에 전달됩니다.함수ConvertTo-UpperCase
는 다음과 같이 정의됩니다.
PS >기능. 대문자로 변환($string) { $string.토우퍼() } PS >대문자로 변환 @' 하나 둘 셋 eins zwei drei >> '@ 하나 둘 셋 EINS ZWEI DREI
다음으로 큰따옴표가 붙은여기 문자열을 사용한 변수 보간 및 스테이트먼트의 실행을 나타내는 예를 나타냅니다.
PS >$doc, $140 = 에밋 브라운 박사, '마티 맥플라이' PS >시간 = [날짜 시간]1985년 10월 25일 금요일 오전 8:00:00 PS >$diff = 새 시간 범위 - 분 25 PS >@" $doc : 저게 제 시계인가요? $marty: 예!어, $($time)입니다.시간)시! >> $doc : 완벽해!내 실험이 성공했어!모두 $($diff)입니다.분)의 속도 저하. $marty:잠깐만요.잠깐만.선생님... $($time + $diff)라는 건가요?ToShort Time String()? >> $doc : 정확합니다. $marty: 젠장!학교에 늦었어! >> "@ 에밋 브라운 박사: 저 시계들이 내가 들은 내 시계들인가요? 마티 맥플라이: 예!어, 8시야! Dr. Emett Brown: 완벽해!내 실험이 성공했어!모두 정확히 25분이나 느려요 마티 맥플라이: 잠깐만.잠깐만.박사님... 지금 8시 25분이라고 말씀하시는 건가요? Dr. Emett Brown : 정확하다. 마티 맥플라이: 젠장!학교에 늦었어!
대신 작은 따옴표로 둘러싸인여기 문자열을 사용하면 다음과 같이 출력됩니다.
PS >@' $doc : 저게 제 시계인가요? $marty: 예!어, $($time)입니다.시간)시! >> $doc : 완벽해!내 실험이 성공했어!모두 $($diff)입니다.분)의 속도 저하. $marty:잠깐만요.잠깐만.선생님... $($time + $diff)라는 건가요?ToShort Time String()? >> $doc : 정확합니다. $marty: 젠장!학교에 늦었어! >> '@ $doc : 저 시계들 내 시계들이야? $marty: 예!어, $($time)입니다.시간)시! $doc : 완벽해!내 실험이 성공했어!모두 $($diff)입니다.분)의 속도 저하. $marty : 잠깐만요.잠깐만.선생님... $($time + $diff)라는 건가요?ToShort Time String()? $doc : 정확합니다. $marty: 젠장!학교에 늦었어!
디지털 명령어(DCL)
DCL 스크립트에서 $ 기호로 시작하지 않는 입력 행은 이전 명령어의 입력으로 암묵적으로 처리됩니다.$로 시작하지 않는 행은 모두 여기에 기재되어 있습니다.입력은 프로그램으로 전달되거나 논리명 SYS$INPUT(유닉스 stdin 개념과 유사)으로 명시적으로 참조될 수 있습니다.
예를 들어 입력을 SYS$INPUT으로 명시적으로 참조하는 경우:
$TYPE SYS$INPUT 이 텍스트는 TYPE 명령에 의해 화면에 직접 반영됩니다.$! 기타 명령어...
생산:
이 텍스트는 TYPE 명령에 의해 화면에 직접 반영됩니다.
또한 DECK 명령어는 처음에는 펀치카드 지원(이름을 따서 데이터 덱의 시작을 나타냄)을 목적으로 하며 이전 [14]명령어에 입력을 제공할 수 있습니다.입력 덱은 $ EOD 명령 또는 /Dollars 매개 변수로 DECK에 지정된 문자 패턴으로 종료됩니다.
프로그램의 통화 가치 합계 예:
$ 실행 ADD_SUMS.EXE $13.53 $3.33 $2.33 EOD
다음과 같은 출력이 생성됩니다(ADD_SUM이 값을 읽고 추가하기 위해 쓰여져 있다고 가정합니다).
19.19달러
DECK /DOLLARs를 사용하여 다른 명령 파일을 작성하는 예:
$COPY SYS$INPUT SYS$SCRatch:TEMP.COM $DEC /DOLLars=$$TYPE SYS$INPUT 이 예에서는 DECK를 사용하여 명령 파일 $$$$$! 기타 명령어 파일 내에서 명령어 파일을 작성하는 방법을 보여 줍니다.
YAML
YAML은 주로 공백 들여쓰기에 의존하기 때문에 딜리미터 충돌에 강하고 접힌 문자열 리터럴로 여러 줄의 문자열을 나타낼 수 있습니다.
--- 표제: "예시 의 유전적인 스타일의 기능성 사용. YAML" 날짜.: "2007-06-01" 예: > HTML은 수정 없이 YAML에 들어갑니다. 메세지: <blockquote style="block: 이탤릭체 12pt Times"> <p>"3은 항상 2보다 크다. 2" </p>의 큰 값에도 대응합니다. <p>--작성자 불명 </p> </블록 따옴표>
「 」를 참조해 주세요.
레퍼런스
- ^ a b "Here-Document description in the POSIX/SUS standard". Archived from the original on 2014-04-27. Retrieved 2018-04-20.
- ^ "Here document - Rosetta Code". rosettacode.org. Retrieved 2017-02-20.
- ^ a b Darwin tcsh man 페이지
- ^ Wayne Pollock. "Shell Here Document Overview". hccfl.edu. Archived from the original on 2014-05-29. Retrieved 2014-05-28.
- ^ 예를 들어 bash deredoc 내의 변수 사용을 참조하십시오.
- ^ peldata:스페셜 리터럴
- ^ 루비: 오브젝트: __END__
- ^ Perl 연산자와 우선순위
- ^ "Perl5260delta - what is new for perl v5.26.0 - Perldoc Browser".
- ^ PHP 설명서의 세레독
- ^ "PHP: Strings - Manual".
- ^ 라켓 설명서의 문자열
- ^ @ Racket 문서의 구문
- ^ "Archived copy". Archived from the original on 2016-03-04. Retrieved 2015-04-21.
{{cite web}}
: CS1 maint: 제목으로 아카이브된 복사(링크)
장군
- Bash 레퍼런스 매뉴얼
- 고급 Bash-Scripting 가이드, Mendel Cooper
- ^ 자세한 내용은 bash: "여기 문서의 모든 행은 파라미터 확장, 명령어 대체 및 산술 확장의 대상이 됩니다.후자의 경우 문자 시퀀스 \newline은 무시되며 3.6.6 Here Documents에 따라 문자 "\", "$", """를 따옴표로 사용해야 합니다.주의:
"
는 여기서 설명하는 문서에서는 특별한 의미가 없으며 이중 문자열과 달리 이스케이프할 필요가 없습니다.그렇지 않으면 기본적으로 동일합니다. - ^ '견적'에는 탈출이 포함되어 있기 때문에
\EOF
사용되는 것으로, 인용되고 있습니다.따라서 변수 보간은 발생하지 않으며, 끝은EOF
단,\\EOF
사용되고 있습니다.따옴표로 묶고 끝납니다.\EOF
그러나 이 놀라운 동작은 토큰을 단순히 기록하는 토큰에 의해 원래의 인용된 값을 보존할 필요 없이 쉽게 셸에 구현된다.
하나의 어플리케이션은\'
시작 딜리미터로서, 따라서'
끝 딜리미터로 지정합니다.이것은 여러 줄의 스트링 리터럴과 비슷하지만 시작 및 끝 줄 바꿈을 제거합니다. - ^ 탭은 일반적으로 편집기에서 입력할 수 있지만 명령줄에서는 일반적으로 다음과 같이 입력합니다.Ctrl+V +는 탭 완료로 인해 이 예에서는 실제 탭이므로 복사하여 붙여넣을 수 있습니다.