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

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

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

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

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

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:

  • Как запустить gnuplot, просто набрав «gp» в osx?
  • Использование eval и sed для выполнения подсчета и управления скриптами
  • Apache vs lighthttpd: разные типы поведения с типом mime
  • Как разбить файл на основе контекста?
  • sed работает при вводе из эха, но не из файла
  • Скрыть или маску каталога для процесса на OS-X
  • Проверка, могу ли я получить некоторые порты с моего компьютера
  • Примените цвета к выходу терминала, чтобы выделить URL и другие
  • Сортировка jpg в соответствии с датой создания и конвертирование в одиночный pdf
  • Преобразование нескольких групп PNG-файлов в многослойные ICO-файлы
  • Почему ядро ​​может быть дросселировано?
  • Linux и Unix - лучшая ОС в мире.