Heredocument가 함수 내에서 들여쓰기를 실행하지 못했습니다.

Heredocument가 함수 내에서 들여쓰기를 실행하지 못했습니다.

함수와 함수 호출이 포함된 스크립트가 있습니다. 함수 내부에는 다음 문서가 있습니다.

#!/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

관련 정보