에레독 배관을 위한 다중 라인 구문; 이것은 휴대 가능합니까?
다음 구문에 대해 잘 알고 있습니다.
cmd1 << EOF | cmd2
text
EOF
하지만 bash가 제게 다음과 같은 글을 쓸 수 있다는 것을 발견했습니다.
cmd1 << EOF |
text
EOF
cmd2
(heredoc는 cmd1에 대한 입력으로 사용되고 cmd1의 출력은 cmd2에 파이프로 연결됩니다.)이것은 매우 이상한 구문처럼 보입니다.휴대용입니까?
예, POSIX 표준은 이것을 허용합니다.2008년 버전에 따라:
여기에 있는 문서는 다음 이후에 시작하는 단일 단어로 처리되어야 합니다.
<newline>구분 기호와 a만 포함된 줄이 있을 때까지 계속됩니다.<newline>없는<blank>사이의 글자그런 다음 문서가 있으면 다음 문서가 시작됩니다.
또한 다음과 같은 여러 "여기에 있는 문서"의 예를 동일한 줄에 포함합니다.
cat <<eof1; cat <<eof2
Hi,
eof1
Helene.
eof2
그래서 리다이렉션이나 파이프를 하는 데는 문제가 없습니다.예는 다음과 같습니다.
cat file |
cmd
셸 문법(링크된 페이지 아래)은 다음과 같은 정의를 포함합니다.
pipe_sequence : command
| pipe_sequence '|' linebreak command
newline_list : NEWLINE
| newline_list NEWLINE
;
linebreak : newline_list
| /* empty */
따라서 파이프 기호 뒤에는 줄 바꿈이 따르지만 파이프라인의 일부로 간주될 수 있습니다.
네, 그것은 POSIX 쉘 문법에 있습니다.또한 동일한 명령에 대해 두 개 이상의 here-doc을 가질 수 있습니다(다른 예제에서는 두 개를 사용함).cat호출, 그러나 이것도 작동합니다):
cat <<EOF1 <<EOF2
first here-doc
EOF1
second here-doc
EOF2
이것은 (stdin에 대해 2개의 here-docs를 사용하여) 고안되었지만, 다른 파일 설명자에 대한 입력을 제공하는 것을 고려하면 즉시 의미가 있습니다.
전체를 포기할 가능성도 있습니다.여기 문서를 직접 사용할 수 있도록 하는 것은 어떻습니까?cmd:
cmd << EOF
input
here
EOF
흠, 저는 그렇다고 생각합니다, POSIX 모드에서 bash의 테스트에 따르면:
$ bash --posix
$ cat <<EOF |
> ahoj
> nazdar
> EOF
> sed 's/a/b/'
bhoj
nbzdar
안녕하세요, 예를 들어 이것을 확인하세요.
#!/bin/sh
( base32 -d | base64 -d )<<ENDOFTEXT
KNDWW42DNNSHS5ZXPJCG4MSVM5MVQVT2JFCTK3DELBFDCY2IIJYGE2JUJNHWS22LINVHQMCMNVFD
CWJQIIZVUV2JOVNEOVJLINTW6PIK
ENDOFTEXT
안부 전해요
언급URL : https://stackoverflow.com/questions/7046381/multiline-syntax-for-piping-a-heredoc-is-this-portable
'programing' 카테고리의 다른 글
| Xcode 프로젝트에 대한 Git ignore 파일 (0) | 2023.05.02 |
|---|---|
| 데이터 액세스 후 C#에서 Excel 응용 프로그램 프로세스 닫기 (0) | 2023.05.02 |
| 구분 문자열을 목록으로 분할()하는 방법 (0) | 2023.05.02 |
| 데이터 입력 후 문자열을 트리밍하는 가장 좋은 방법입니다.사용자 정의 모델 바인더를 작성해야 합니까? (0) | 2023.05.02 |
| MongoDB에서 참조된 개체를 쿼리하려면 어떻게 해야 합니까? (0) | 2023.05.02 |