You can skip positional parameters with shift but can you delete positional parameters by passing the position?
x(){ CODE; echo \"$@\"; }; x 1 2
while loop over "$@" with shift + set: move each parameter from first to last position, except "test"
# remove option "test" from positional parameters
i=1
while [ $i -le $# ]
do
var="$1"
case "$var" in
test)
echo "param \"$var\" deleted"
i=$(($i-1))
;;
*)
set -- "$@" "$var"
;;
esac
shift
i=$(($i+1))
done