여기에 문서를 들여쓰기하면 구문 오류가 발생할 수 있습니다.

여기에 문서를 들여쓰기하면 구문 오류가 발생할 수 있습니다.

내 쉘 스크립트에 다음 코드 조각이 있는데 오류가 있으며 일부 조사에도 불구하고 원인을 확인할 수 없는 것 같습니다. 다음과 같은 코드를 실행하면 스크립트가 메시지와 함께 종료됩니다.

./my_script.sh:  line 53: syntax error at line 61: `<<' unmatched

나는 이것을 사용했고 set -x오류가 발생할 때까지 모든 것이 괜찮은 것을 볼 수 있습니다(어차피 변수만 설정했습니다). 어떤 이유로든 앞의 공백(표시되지 않는 문자가 아닌 공백임)을 제거하기만 하면 eot작동합니다. 내 XML이 약간 잘못 정렬된 것처럼 보이지만 제대로 작동합니다. 설명할 수 없는 이런 일이 싫고 XML도 예쁘게 보이길 바라기 때문에 왜 이런 일이 일어나는지 아는 사람이 있습니까?

스크립트의 관련 부분은 다음과 같습니다.

# ... various environment variables set here ...

clean_files()          # line 53
{
    # Clear up the intermediate files
    mv $datafile $ARCHIVE_DIR/$(basename $datafile).$$
}

xmlfile_header()
{                      # line 60
        cat <<- eot
                <?xml version="1.0" encoding="UTF-8" ?>
                <ppllist>
        eot  
}

# ... more stuff ...

답변1

<<- wordhere-doc 양식에는 다음이 필요합니다.탭만이전에 나타날 수 있습니다 word. 공백은 허용되지 않으며 탭이어야 합니다.

인용하다:http://www2.research.att.com/sw/download/man/man1/ksh.html#Input/Output

관련 정보