¿Cómo uso expresiones regulares en scripts bash?

Quiero verificar si una variable tiene un año válido usando una expresión regular. Leyendo el manual bash entiendo que podría usar el operador = ~

Mirando el ejemplo a continuación, esperaría ver “no está bien” pero veo “OK”. ¿Qué estoy haciendo mal?

i="test" if [ $i=~"200[78]" ] then echo "OK" else echo "not OK" fi 

Fue cambiado entre 3.1 y 3.2:

Esta es una breve descripción de las nuevas características agregadas a bash-3.2 desde el lanzamiento de bash-3.1.

Citando el argumento de cadena para el operador [[command’s = ~ ahora fuerza la coincidencia de cadenas, como con los otros operadores de coincidencia de patrones.

Entonces úsalo sin las comillas así:

 i="test" if [[ $i =~ 200[78] ]] ; then echo "OK" else echo "not OK" fi 

Necesita espacios alrededor del operador = ~

 i = "prueba"
 si [[$ i = ~ "200 [78]"]];
 entonces
   echo "OK"
 más
   echo "no OK"
 fi