Игнорировать определенные символы при сравнении переменных?

Игнорировать определенные символы при сравнении переменных?

Например, если это мой сценарий:

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

Тогда как мне сделать так, чтобы он игнорировал ', ?, ,и .например?

Так что в принципе Whats going on, What's going on, What's going on?и What's going on.все это будет выглядеть как одно и то же. Я знаю, что могу поставить || [[ $yesno == ".. ]]для сопоставления несколько переменных, но я не могу напечатать каждую отдельную комбинацию.

решение1

Если вы хотите, чтобы работали только ваши конкретные примеры, вы можете использовать сопоставление регулярных выражений bash

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

где мы экранируем кавычки и пробелы обратной косой чертой.

решение2

Вы можете просто удалить все символы, кроме буквенно-цифровых, в вашей переменной перед сравнением:

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

решение3

Один из самых распространенных и универсальных способов сделать это — передать строку в конвейер grepи проверить grepкод возврата. ifОператор может проверить код выхода любой команды или конвейера:

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

В дополнение к упомянутым вами символам, здесь также допускается 0 или более пробелов между словами.

Эта конструкция должна работать в OS X, FreeBSD, GNU/Linux и любой другой системе, которая поддерживает POSIX grep:

Связанный контент