¿Ignorar ciertos caracteres al comparar variables?

¿Ignorar ciertos caracteres al comparar variables?

Por ejemplo, si este es mi script:

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

Entonces, ¿cómo hago para que se ignore ', y ?, por ejemplo?,.

Básicamente Whats going on, What's going ony parecería que todos son lo mismo What's going on?. What's going on.Sé que puedo hacer || [[ $yesno == ".. ]]coincidir múltiples variables, pero no puedo escribir cada combinación.

Respuesta1

Si solo desea que funcionen sus ejemplos específicos, puede usar una coincidencia de expresiones regulares de bash

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

donde escapamos con barra invertida la cita y los espacios.

Respuesta2

Puedes simplemente eliminar todos los caracteres además de los alfanuméricos en tu variable antes de la comparación:

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

Respuesta3

Una de las formas más comunes y universales de hacer esto sería canalizar la cadena grepy verificar grepel código de retorno. La ifdeclaración puede verificar el código de salida de cualquier comando o canalización:

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

Además de los caracteres que mencionaste, esto también permite 0 o más espacios entre palabras.

Esta construcción debería funcionar en OS X, FreeBSD, GNU/Linux y cualquier otro sistema que proporcione POSIX grep:

información relacionada