我只是想从 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)