一致する「)」の検索中に予期しない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

イッカチュが正しいです。コードはインデントなしで現代バージョンのBashでうまく機能します。しかし、「ここにドキュメント」の代わりに「ここに文字列」を使用すると、理解してデバッグする方が簡単であることを付け加えたいと思います。

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

または標準パイプを使用してください。

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

関連情報