考虑以下 ksh 脚本“myquery.ksh”
#/usr/bin/env ksh -eu
PROCESS_TYP=$1
PROCESS_DT=$2
#Generate a query
makeSQL()
{
local numfiles=0
local query='SEL \\* FROM TABLE_1_'
case "$1" in
'ABC') query="${query}ABC" ; numfiles=1 ;;
'DEF') query="${query}DEF" ; numfiles=7 ;;
esac
query="${query}_V WHERE LOAD_DT='${2}';"
printf "$query\n"
eval $3="${query}"
eval $4=$numfiles
return 0
}
makeSQL $PROCESS_TYP $PROCESS_DT qry num_files
printf "QUERY: $qry\n"
printf "NUMFILES: $num_files\n"
在上面的代码中,eval $3="${query}" 语句永远不会正常工作。在所有情况下,它似乎都试图在 "local query="... 语句中使用 "*"。
./myquery.ksh ABC 2011-01-01
它总是返回这样的消息:
./myquery.ksh: line 17: \*: command not found
我很确定这是我自己的用户错误,我在这种情况下如何应用 eval,但已经尝试了几乎所有替代语法结构来执行 eval $3 分配,但无法完成这项工作。
我已将其标记为 bash,因为我很确定它在那里的行为也会相同......