What do you get with [![:digit:]] then? It seems to work the same with both ! and ^ here:
$ now=$EPOCHREALTIME $ echo "${now%[^[:digit:]]*}" "${now#*[^[:digit:]]}" 1629544775 183030 $ echo "${now%[![:digit:]]*}" "${now#*[![:digit:]]}" 1629544775 183030 On Fri, Aug 20, 2021 at 10:30 PM hancooper via Bug reports for the GNU Bourne Again SHell <bug-bash@gnu.org> wrote: > I am using EPOCHREALTIME and then computing the corresponding human > readable form, that can handle > changes in locale > > now=$EPOCHREALTIME > printf -v second '%(%S)T.%s' "${now%[^[:digit:]]*}" "${now#*[^[:digit:]]}" > printf -v minute '%(%M)T' "${now%[^[:digit:]]*}" > printf -v hour '%(%H)T' "${now%[^[:digit:]]*}" > > Incidentally, [![:digit:]] does not work there, you need to use the > POSIX-specified caret (^) instead of an > exclamation mark when using character classes. I'm not sure if this is > intentional or a bug in bash; man > page doesn't seem to mention it.