Рассмотрим следующий скрипт 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, потому что я вполне уверен, что и там он будет вести себя одинаково ...