함수와 함수 호출이 포함된 스크립트가 있습니다. 함수 내부에는 다음 문서가 있습니다.
#!/bin/bash
DWA() {
......
mysql -u root -p <<-MYSQL
......
MYSQL
}
DWA
질문
여기 문서 구분 기호와 관련된 오류로 인해 실행이 중단되었습니다(구분 기호 들여쓰기로 인해 발생했을 수 있음 MYSQL
).
모든 선행 줄(공백/탭)을 제거하면 문제가 발생하지 않습니다.
내 질문
함수가 모든 선행 탭을 제거한다는 점을 고려하면(공백과 같은 다른 유형의 선행에 대해서는 잘 모르겠습니다), 왜 이 문제가 발생하며, 해결하려면 어떻게 해야 합니까?
답변1
구분된 문서를 들여쓰기 위해 탭을 사용하지 않을 수도 있습니다. Heredoc의 모든 줄은 첫 번째 줄(구분 기호가 삽입된 곳)을 포함하여 탭을 사용하여 들여쓰기해야 합니다. 다음은 테스트 사례입니다.
echo -e 'function heredoc() {\n\tcat <<-HEREDOC\n\t\tThis is a test\tHEREDOC\n} heredoc' > heredoc.sh
명령을 실행한 후 heredoc.sh
다음을 실행해 보세요.
This is a test.
또는 여기에 동일한 스크립트가 있지만 첫 번째 줄은 탭 대신 공백으로 들여쓰기되어 있습니다.
echo -e 'function heredoc() {\n cat <<-HEREDOC\n\t\tThis is a test\tHEREDOC\n} heredoc' > heredoc2.sh
실행하면 heredoc2.sh
다음과 같은 오류 출력이 표시됩니다.
bash heredoc2.sh
heredoc2.sh: line 4: warning: here-document at line 2 delimited by end-of-file (wanted `HEREDOC')
heredoc2.sh: line 5: syntax error: unexpected end of file