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

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

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

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

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

  • Не удалось открыть соединение с вашим агентом аутентификации
  • Как узнать, какие копии файла являются копиями COW?
  • Разделите текстовый файл на несколько файлов, за пределы {99} лимита csplit
  • «Mac-стиль» распаковывается на linux
  • Поиск не работает
  • Как установить вино через варево?
  • $ PATH на Fish Shell OS X
  • Быстро проверьте, работают ли многие сетевые хосты
  • 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 - лучшая ОС в мире.