A expressão regular não precisa corresponder à string inteira. É por isso que você tem ^
e $
para o início e o fim da sequência, respectivamente.
[[ CoNfUsInG =~ ^[[:lower:]]*$ ]] || echo no
CoNFUsInGlY, ^[[:lower:]]*
(sem o $
) ainda corresponde, pois há zero letras minúsculas no início da string.