【问题标题】:How to assign a variable value to a variable from another file?如何将变量值分配给另一个文件中的变量?
【发布时间】: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。

标签: shell variables ksh


【解决方案1】:
#!/bin/ksh

# one example using eval

D_SCHEMA=DEV
EXEC_SQL='SELECT COL FROM $D_SCHEMA.TABLE'

echo "$EXEC_SQL"
# output: SELECT COL FROM $D_SCHEMA.TABLE

eval new_var=\""$EXEC_SQL"\"
echo "$new_var"
# output: SELECT COL FROM DEV.TABLE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2020-03-12
    相关资源
    最近更新 更多