1

関数ShowJobHistoryがあり、別の関数から呼び出されています。この関数を最初に呼び出すと、すべてが正常に機能し、適切な数の引数がカウントされ、必要に応じて解析されます。しかし、次の呼び出しでは、複数の引数を指定しても、この関数はそれらを1つとして扱い、解析後に(jb.RJBGID = 12871 12873 12868)に見えます。私の機能の何が問題になっていますか?

ShowJobHistory () {
conditions=
argCount=$#
if [[ $argCount -ne 0 ]] then
    if [[ $1 == [iI] && $argCount -eq 3 ]] then
        if [[ $2 -lt $3 ]] then
            conditions="( jb.RJBGID between $2 and $3 )"
        else
            conditions="( jb.RJBGID between $3 and $2 )"
        fi
    else
        conditions="("
        for nr in $@
        do
            conditions="${conditions} jb.RJBGID=${nr} or "
        done
        conditions=${conditions%or }
        conditions=$conditions")"
    fi

    typeset query

以下の関数はShowJobHistoryを呼び出します。

ShowJobHistoryMenu () {
typeset jobID
save=
echo "Enter jobIDs" 
read jobID?"Enter jobID: "  
while [[ $save != [nNyY] ]]
do
    read save?"Save output to file? [y/n]"
done
if [[ save = [yY] ]] then
    ShowJobHistory $jobID | tee $TRACEDIR/output.txt
else
    ShowJobHistory $jobID
fi
}
4

1 に答える 1

1

シェルスクリプトで設定IFS=" "し、問題が修正されているかどうかを確認します。

それ以外の場合は、この回避策を試してください。

for nr in `echo $@` [[ Similar to: for nr in $@ ]]
do
   conditions="${conditions} jb.RJBGID=${nr} or "
done

それ以外の場合:

set -A array $@
for nr in `echo ${array[@]}` [[ Similar to: for nr in ${array[@]} ]]
do
  conditions="${conditions} jb.RJBGID=${nr} or "
done

合計数を取得するには 使用できる配列内の要素の数:そして、配列を再度使用echo ${#array[@]} する前に覚えておいてください(ただし、安全のために、呼び出されるたびにそれを実行します)。unset arrayset -A array

上記のすべての解決策を試してください。まだ解決されていない問題がある場合はお知らせください。

于 2012-08-10T09:14:00.863 に答える