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 on
y 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 grep
y verificar grep
el código de retorno. La if
declaració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: