Verifique esta resposta no SO. Como você está usando a versão 3.00 do bash 3, pode considerar o seu problema. Logo, a partir da versão 3.2, citar o argumento string para o comando [[ do comando =~ força a correspondência de strings, então o padrão correto para o bash 4 deve ser:
$ [[ "20110228" =~ ^[0-9]{8}$ ]] && echo matches
matches