【发布时间】:2013-11-15 12:09:07
【问题描述】:
我正在尝试将我的 ksh 脚本代码放入变量中,以便稍后使用 eval 执行它
示例虚拟脚本逻辑
============================
my_command=$(cat
###//function count records in database table record_before=$(count_records $table_name) ###//function inserting record to database table insert_records $table_name ###//function count records in database table after insert record_after=$(count_records $table_name)EOF)
============
eval "$my_command"
问题是,如果我仍然插入一条记录,record_before 和 record_after 仍然包含相同数量的记录。 例子: 表有 1 条记录。 记录之前 =1 插入新记录表现在有 2 条记录 record_after=1
record_after 应该有 2 条记录而不是 1 条
有什么建议吗?
* 已解决 * 您应该在执行的函数周围加上单引号以在 EVAL 中正常工作
record_before='$(count_records $table_name)'
record_after='$(count_records $table_name)'
发现了一些新的东西,以避免引用我现在使用的代码
var=$(CAT
【问题讨论】:
-
嗯,我想我刚刚发现问题出在哪里:record_before='$(count_records $table_name)',我应该在调用函数周围加上单引号
-
你真的不想以这种方式使用
cat。除非您包含单引号,否则变量扩展发生在eval之前。 -
不要忘记在
insert_records行中引用$table_name。否则,在您的环境中更改table_name然后evaling 将无法正常工作。你真的应该为此使用 shell 函数。 -
好的,所以问题似乎出在使用的 cat 函数中 - 它在 eval 中执行变量之前提取变量,您能否建议如何使用 my_var=
-
你为什么不使用 shell 函数呢?