내 쉘 스크립트에 다음 코드 조각이 있는데 오류가 있으며 일부 조사에도 불구하고 원인을 확인할 수 없는 것 같습니다. 다음과 같은 코드를 실행하면 스크립트가 메시지와 함께 종료됩니다.
./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
<<- word
here-doc 양식에는 다음이 필요합니다.탭만이전에 나타날 수 있습니다 word
. 공백은 허용되지 않으며 탭이어야 합니다.
인용하다:http://www2.research.att.com/sw/download/man/man1/ksh.html#Input/Output