![일치하는 ")"을 찾는 동안 예기치 않은 EOF가 발생했습니다.](https://linux55.com/image/97184/%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%22)%22%EC%9D%84%20%EC%B0%BE%EB%8A%94%20%EB%8F%99%EC%95%88%20%EC%98%88%EA%B8%B0%EC%B9%98%20%EC%95%8A%EC%9D%80%20EOF%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
난 그냥 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)