【发布时间】:2020-07-27 11:19:27
【问题描述】:
我有一个 sql 文件 abc.sql 有一个 SELECT SQL 语句
SELECT COL FROM $D_SCHEMA.TABLE;
我有一个 shell 脚本 script.ksh
D_SCHEMA=DEV
EXEC_SQL=`cat abc.sql`
#echo $EXEC_SQL
#Function db_sql, which exports data to a csv file
db_sql "EXPORT TO /app/dev FILE ${EXEC_SQL}"
现在,当内容分配给 shell 脚本中的变量时,我无法从 sql 文件中将值分配给 $D_SCHEMA。
目前该变量在 shell 脚本中被视为文字。
echo $EXEC_SQL
SELECT COL FROM $D_SCHEMA.TABLE
预期输出
echo $EXEC_SQL
SELECT COL FROM DEV.TABLE
我该如何解决这个问题?
【问题讨论】:
-
您希望在不会发生的替换中进行替换。为什么不使用您的 select 语句分配 EXEC_SQL 而不是使用
cat abc.sql的东西? -
select 语句在 .sql 文件中,我们必须从该文件中读取内容。否则我们如何才能将 select 语句分配给 EXEC_SQL?
-
EXEC_SQL="SELECT COL FROM $D_SCHEMA.TABLE;"一个。或者将它放在 sql 文件中并改为源文件。你看,我可能错了,但是,我觉得这是一个 XY 问题,你能说明整个问题以及到目前为止你尝试了什么吗?
-
D_SCHEMA可以扩展,这样的例子有帮助吗?eval new_var=\""$EXEC_SQL"\"; echo "$new_var" -
首先 sql 文件是由某个应用程序提供的,我们必须利用该文件进行导出。所以我们不能有表达式 EXEC_SQL="SELECT COL FROM $D_SCHEMA.TABLE;"在 sql 文件中。我们必须以某种方式从该文件中获取 select 语句并替换模式名称和一些其他变量,然后提供给函数 db_sql。