寻找匹配的“)”时出现意外的 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)

相关内容