declare -a ptdr
# paas thru define
     ptd() {
declare ptdi ptd ptdm ptda ptdp ptdc ptdz
unset -v ptdm otda ptdp ptdc ptdz
ptdz+=( -g )

    while (( ++ptdi <= $# )) ; do
ptd=${!ptdi}
   if [[ ! -v ptdm && $ptd == -* ]] ; then
  case $ptd in
 --)
ptdm=
 ;;
 -p)
ptdp=
 ;;
 -p-)
printf %s\\n "${ptdr[@]}"
return
 ;;
  esac
ptdz+=( "$ptd" )
continue
   else
 [[ ! -v ptdm ]] &&
ptdm=
 if [[ -v ptdp ]] ; then
ptda+=( "$ptd" )
 else
ptdr+=( "${ptd%%=*}" ) ptdc+=( "$ptd" )
 fi
   fi
    done

 if [[ -v ptdp ]] ; then
declare "${ptdz[@]}" "${ptda[@]}"
 else
declare "${ptdz[@]}" "${ptdc[@]}"
 fi
     }

ptd one=111
ptd -p one
ptd -A x1 'x2=( a 11 b 22 )'
ptd -p-
