Bash 当我不使用';我不想这样

Bash 当我不使用';我不想这样,bash,eval,ksh,evaluation,expression-evaluation,Bash,Eval,Ksh,Evaluation,Expression Evaluation,考虑以下ksh脚本“myquery.ksh” 在上面的代码中,eval$3=“${query}”语句从未正常工作。在所有情况下,它似乎都试图将“local query=”中的“*”全局化。。。声明 ./myquery.ksh ABC 2011-01-01 它总是返回如下消息: ./myquery.ksh: line 17: \*: command not found qry=$query num_files=$numfiles 我很确定这是我自己在这种情况下应用eval时的用户错误,但我尝

考虑以下ksh脚本“myquery.ksh”

在上面的代码中,eval$3=“${query}”语句从未正常工作。在所有情况下,它似乎都试图将“local query=”中的“*”全局化。。。声明

./myquery.ksh ABC 2011-01-01
它总是返回如下消息:

./myquery.ksh: line 17: \*: command not found
qry=$query
num_files=$numfiles
我很确定这是我自己在这种情况下应用eval时的用户错误,但我尝试了几乎所有的替代语法构造来完成eval$3赋值,但无法实现这一点

我将其标记为bash,因为我非常确定它在那里的行为也会相同…

您的意思是:

eval "$3=\$query"
eval "$4=\$numfiles"
说明:在您的示例中,您希望将变量名传递给函数,然后设置这些变量。所以这些陈述应该是这样的:

./myquery.ksh: line 17: \*: command not found
qry=$query
num_files=$numfiles
现在的问题是如何将这些字符串组合在一起。左侧来自参数,例如
“$3”
。右侧包含一个
$
,不能过早解释。因此,我把它写成
\$

我总是向
eval
命令传递一个字符串,因为这会提供最可靠的结果。不是
eval echo foo
,而是
eval“echo foo”

或者你可以写:

eval "$3"='$query'
eval "$3="'$'"query"
但我建议的第一种形式对我来说似乎最简单