Danke an rklm und kB für die Hinweise.
Für mich war das Stichwort "composite patterns" hilfreich. Zu meiner Schande muss ich gestehen, dass ich die Teile zwar gelesen aber anders verstanden hatte. Aus diesem Grund hatte ich die RegEx immer in eingetretenen Pfaden benutzt.
Man lernt halt nie aus. Das was ich als Gruppierungsklammer gesehen hatte ist in Wirklichkeit der Begrenzer für die pattern-list. Das erklärt, warum bei dem +(...) Konstrukt keine Array-Zuordnungen z.B. bei ${BASH_REMATCH[1]}
erfolgte wie dies bei ^([0-9]+)$
festgestellt werden kann.
uint () [[ $* == +([0-9]) ]] uint "456" ; echo $?:${BASH_REMATCH[1]} 0: uint () [[ $* =~ +([0-9]) ]] uint "456" ; echo $?:${BASH_REMATCH[1]} 2: uint () [[ $* =~ ^([0-9]*)$ ]] uint "456" ; echo $?:${BASH_REMATCH[1]} 0:456