Eu fui muito rápido com isso, seu teste funciona. Eu suspeito que você tenha definido $SCREEN_NAME
globalmente ou anteriormente no script como uma string contendo um caractere ilegal.
^[a-zA-Z0-9_.-]+$
corresponde a uma cadeia não-NULL contendo apenas os caracteres permitidos, portanto, se $SCREEN_NAME
for uma cadeia não-NULL contendo apenas os caracteres permitidos, o valor de $SCREEN_NAME =~ ^[a-zA-Z0-9_.-]+$
será 0.
!
inverte seu valor, portanto, se $SCREEN_NAME
for uma string não-NULL contendo apenas os caracteres permitidos, o valor de ! [[ $SCREEN_NAME =~ ^[a-zA-Z0-9_.-]+$ ]]
será 1.
Portanto, a condição é boa.
Execute echo $SCREEN_NAME
no bash
e seu script e verifique se a saída real corresponde ao esperado.
Editar : Para remover o retorno de carro à direita, uma solução é canalizar a saída de grep
para tr
antes de cut
:
SCREEN_NAME=$(grep -i 'server_screen_title' server.properties | tr -d '\r' | cut -f2 -d'=')