一致する `)' を検索中に予期しない 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 であれば問題なく動作します。ただし、"here doc" ではなく "here string" を使用すると、理解しやすくデバッグしやすくなるかもしれません。

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

または、標準パイプラインを使用します。

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

関連情報