Ignorar determinados caracteres ao comparar variáveis?

0

Por exemplo, se este for o meu script:

if [[ $yesno == "What's going on" ]]; then

Então, como eu faço isso? Ignore ' , ? , , e . por exemplo?

Então, basicamente, Whats going on , What's going on , What's going on? e What's going on. parecem ser a mesma coisa. Eu sei que posso colocar || [[ $yesno == ".. ]] para corresponder a várias variáveis, mas não posso digitar todas as combinações.

    
por DisplayName 04.11.2015 / 22:05

3 respostas

1

Você pode simplesmente remover todos os caracteres ao lado dos alfanuméricos em sua variável antes da comparação:

$ yesno="What's going on?"
$ if [[ ${yesno//[^a-zA-Z0-9\ ]/} == "Whats going on" ]]; then echo "OK";fi
OK
    
por 04.11.2015 / 22:22
2

Se você quiser que seus exemplos específicos funcionem, use uma correspondência de expressão regular

[[ $yesno =~ What\'?s\ going\ on[.?]? ]]

onde escapamos com barra invertida a citação e os espaços.

    
por 04.11.2015 / 22:21
0

Uma das formas mais comuns e universais de fazer isso seria canalizar a string em grep e verificar o código de retorno de grep . A instrução if pode verificar o código de saída de qualquer comando ou pipeline:

if echo "$yesno" | grep -q "What'*s *going *on[?.]*"; then

Além dos caracteres que você mencionou, isso também permite 0 ou mais espaços entre as palavras.

Esta construção deve funcionar no OS X, FreeBSD, GNU / Linux e qualquer outro sistema que forneça o POSIX grep:

    
por 04.11.2015 / 22:28