일치하는 `)'을 찾는 동안 예상치 못한 EOF가 발생했습니다.

일치하는 `)'을 찾는 동안 예상치 못한 EOF가 발생했습니다.

저는 단순히 SQL 문에서 출력을 가져와서 bash 변수에 저장하려고 합니다. 일치하는 `)'을 찾는 동안 "예기치 않은 EOF가 발생했습니다." 오류가 발생했습니다. 내가 뭘 잘못하고 있는지 알 수 없습니다. 이 오류가 발생하는 이유는 무엇입니까?

var=$($ORACLE_HOME/bin/sqlplus / as sysdba <<EOF  
select status from v\$instance;
exit;
EOF
)

답변1

스크립트가 그렇게 들여쓰기되어 있나요? here-doc의 구분 기호는 줄의 시작 부분에 있어야 합니다. 이것은 나에게 효과적입니다.

#!/bin/bash
echo $(cat <<EOF
blah
EOF
)

답변2

Ikkachu는 코드가 들여쓰기되지 않은 경우 합리적으로 최신 버전의 Bash에서 제대로 작동해야 한다는 것이 맞습니다. 그러나 "여기 문서" 대신 "여기 문자열"을 사용하면 이해하고 디버그하는 것이 더 쉬울 수 있다고 덧붙이고 싶습니다.

var=$(sqlplus / as sysdba <<< 'select status from v$instance; exit;')

또는 표준 파이프라인을 사용합니다.

var=$(echo 'select status from v$instance; exit;' | sqlplus / as sysdba)

관련 정보