3

私は現在、いくつかの firebird データベースからの小さなバックアップ スクリプトに取り組んでおり、解決できないと思われる奇妙なエスケープの問題を思いつきました。これが私のスクリプトで、一連のコマンドの出力を入れたい sqllog という変数を作成することです。

sqllog=`echo "SELECT * FROM RDB\$DATABASE;" | isql -u SYSDBA -pass mypasswd localhost:mydatabase | tail -n 2 | head -n 1 | wc -l`

これをシェルで実行しようとすると、次のエラーが発生します

Statement failed, SQLCODE = -204

Dynamic SQL Error
-SQL error code = -204
-Table unknown
-RDB
-At line 1, column 15.

テーブルが不明な RDB は、$ をエスケープするのに時間がかからなかったことを意味します。

任意の助けのためのthx :)

4

2 に答える 2

4

で試してください

sqllog=`echo 'SELECT * FROM RDB\$DATABASE;' | isql -u SYSDBA -pass mypasswd localhost:mydatabase | tail -n 2 | head -n 1 | wc -l`
于 2010-06-02T09:00:56.473 に答える
0

この線 :

sql=$(echo "SELECT * FROM RDB\$DATABASE;")

SQLをに設定します

SELECT * FROM RDB$DATABASE;

つまり、isql コマンドが$DATABASE変数を解釈するということです。

(そうでなく、DATABASE がシェル変数である場合は、使用する必要がありますsql=$(echo "SELECT * FROM RDB$DATABASE;")

isql は何を期待していましたか? 詳しく教えて...

于 2010-06-02T09:02:49.037 に答える