A julgar pelos exemplos, acho que você quer verificar se $STR
é
- totalmente alfanumérico (nada além de letras e números), e
- não completamente feito de números (há pelo menos uma letra)?
Implementando essas condições:
[[ "$STR" =~ ^[[:alnum:]]*$ ]] && [[ ! "$STR" =~ ^[[:digit:]]+$ ]] && echo ok
Isso também aceita a string vazia. Para mudar isso, use +
em vez de *
no primeiro padrão.
Testes:
$ for STR in "" . .x .9 x x9 9 ; do
echo -en "$STR\t";
[[ "$STR" =~ ^[[:alnum:]]*$ ]] && [[ ! "$STR" =~ ^[[:digit:]]+$ ]] && echo ok || echo not ok ;
done
ok
. not ok
.x not ok
.9 not ok
x ok
x9 ok
9 not ok