Trying to match a string to only contain lowercase, digit or hypen (-). I had some problems with it and tried to debug my regex. Meanwhile I found that the following matches, even though it shouldn't:
$ if [[ "ABC" =~ ^[a-z]+$ ]]; then echo matched; fi
> matched
$ if [[ "ABC" =~ ^[[:lower:]]+$ ]]; then echo matched; fi
> matched
$ if [[ "abc" =~ ^[a-z]+$ ]]; then echo matched; fi
> matched
$ if [[ "abc" =~ ^[[:lower:]]+$ ]]; then echo matched; fi
> matched
$ echo $LC_CTYPE
> en_US.utf8
$ locale
LANG=de_DE.utf8
LANGUAGE=
LC_CTYPE=en_US.utf8
LC_NUMERIC=en_US.utf8
LC_TIME=de_DE.utf8
LC_COLLATE="de_DE.utf8"
LC_MONETARY=de_DE.utf8
LC_MESSAGES=POSIX
LC_PAPER=de_DE.utf8
LC_NAME=en_US.utf8
LC_ADDRESS=de_DE.utf8
LC_TELEPHONE=de_DE.utf8
LC_MEASUREMENT=de_DE.utf8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=
$ echo $LC_COLLATE # Gives empty line
$ shopt nocasematch
off
I'm using ubuntu 18.04 with glibc version 2.27-3ubuntu1 So I'm kinda lost here. Why does this match?