我有ShowJobHistory函数,它是从另一个调用的。在第一次调用此函数时,一切正常,它会计算正确数量的参数,并按照我的意愿解析它们。但是在下一次调用中,即使我指定了多个参数,此函数也会将它们视为一个,并在解析它们之后查找(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
}
答案 0 :(得分:1)
在shell脚本中设置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 array
(尽管set -A array
每次调用时都会这样做,只是为了更安全。)
尝试上面给出的所有解决方案,如果还有一些未解决的问题,请告诉我。