3

我目前正在处理一些 firebird 数据库中的一个小备份脚本,并且我想出了一个我似乎无法解决的奇怪的转义问题。这是我脚本中的内容,我创建了一个名为 sqllog 的变量,我想在其中放置命令链的输出,就是这样。

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

如果我尝试在 shell 中执行此操作,则会收到以下错误

Statement failed, SQLCODE = -204

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

表未知 RDB 意味着我没有尝试逃避 $.

谢谢任何帮助:)

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 是一个 shell 变量,那么你只需要使用sql=$(echo "SELECT * FROM RDB$DATABASE;")

isql 期望什么?给我更多细节...

于 2010-06-02T09:02:49.037 回答