bash 함수 내에서 heredoc을 사용하는 방법은 무엇입니까?


12

bash 함수 안에 heredoc 을 삽입 할 수 있습니까?

아래의 간단한 샘플로 인해 오류가 발생합니다. ./heredoc_in_function.sh: 10: Syntax error: end of file unexpected (expecting "}")

#!/bin/sh

my_function () {
cat <<HEREDOC
heredoc contents
HEREDOC
}

my_function

환경:

  • 우분투 11.04 (GNU / Linux 2.6.38-8- 서버 x86_64)
  • GNU bash, 버전 4.2.8 (1)-릴리스 (x86_64-pc-linux-gnu)

나는 heredoc이 Perl 일이라는 인상을 받았다. BASH에서 작동한다고 믿을만한 이유가 있습니까?
jdw

@jdw, 여기 문서는 bash를 포함한 많은 언어로 제공됩니다.
Zoredache

나는 지금 그것을 참조하십시오. 멋있는.
jdw

답변:


10

귀하의 코드가 나에게 잘 보였으므로 줄을 위해 한 줄을 복사하여 나에게 도움이되었습니다.

  • OSX 10.7, bash 3.2.48 (1)-릴리스 (x86_64-apple-darwin11).
  • 우분투 10.04.3, bash 4.1.5 (1)-릴리스 (x86_64-pc-linux-gnu)

공백이나 탭 등이 누락되지 않았는지 확인하기 위해 파일을 직접 입력 할 수 있습니까?

또한 어떻게 실행합니까? 내가 chmod +x test.sh한 다음./test.sh

편집 : 닫는 HEREDOC과 함께 줄의 시작 부분에 공백을 추가했을 때와 같은 오류가 발생했습니다.

추가 참고 사항 : 닫는 뒤의 후행 공간으로 인해이 HEREDOC문제가 발생할 수 있습니다


1
이상하게, 그것은 지금 작동합니다 ... Vim 색상 구문 강조는 전에 HEREDOC를 인식했습니다 (닫는 HEREDOC 전에 그 공간을 추가하지 않으면) 외부 파일을 사용하도록 원본 스크립트를 수정 했으므로 확실하지 않습니다. 잘못되었습니다. 그러나 heredocs를 사용하면 훨씬 편리합니다!
Leftium

1
과연! 나는 heredocs를 사랑합니다.
David

1
또한 : 닫는 뒤에 뒤에 공백 HEREDOC이있을 수도 있습니다 (이러한 종류의 오류는 실제로 추적하기 어렵습니다. 한숨.)
0laf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.