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

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

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

Тогда как я могу заставить его игнорировать ' , ? ,, и . например?

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

  • Лучший дистрибутив для MacBook Pro
  • Есть ли пароль root для OS X и Ubuntu?
  • как отлаживать / исправлять сбои экрана при запуске
  • Используйте basename для анализа списка путей, хранящихся в файле
  • Установка ссылок на OSX
  • нужна помощь с проектом vf в рыбной раковине
  • Автоматически уменьшать подсветку дополнительного монитора на MAC
  • Невозможно конкатенировать пути к файлам, разрешено отклонение
  • 3 Solutions collect form web for “Игнорировать определенные символы при сравнении переменных?”

    Вы можете просто удалить все символы рядом с алфавитно-цифровыми в своей переменной перед сравнением:

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

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

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

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

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

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

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

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

    Linux и Unix - лучшая ОС в мире.