次の 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としてタグ付けしました...