Intereting Posts
Удаление jre7 устанавливает jre6 Как печатать строки, соответствующие шаблону с помощью grep? Предупреждение о записи во время ввода сообщения zsh Почему утилита переименования на Debian / Ubuntu отличается от той, которая используется в других дистрибутивах, например CentOS? iptables: Как разрешить только трафик SSH и VPN? Как записать debian iso в usb Вопрос о виртуализации CentOS и KVM и PCI Passthrough inotifywait для перемещения файла после загрузки пользователем декомпрессии bzip2, изменения и сжатие текстового файла по конвейеру Периодически получать использование ЦП для одного процесса Как исправить нечетные escape-последовательности командной строки (ps1) после удаленного входа в iTerm2 Почему копируемый исполняемый файл rm не будет работать на другой Linux-машине? Как проверить, какой клиент обращается к Unix? Bash: показать содержимое текстового файла, при каждом появлении выделенного слова Установки завершения zsh (autojump) – Как их использовать?

Bash в пространстве с двойными скобками, используя оператор «~ =»

Проще говоря, я просто не могу найти способ сопоставить переменную с некоторым шаблоном, содержащим пробелы.

Вот что я ожидал от работы (эхо «ok»)

item='foobar baz' pat=".+bar baz" if [[ "$item" =~ "$pat" ]] ; then echo ok fi 

Добавление / удаление котировок вокруг $ pat не имеет никакого значения. Я получаю эти два erros ниже:

 bash: conditional binary operator expected bash: syntax error near `~=' 

Может кто-то, пожалуйста, помогите мне указать, что я делаю неправильно здесь? Должен ли я поместить шаблон сразу (без кавычек / двойных кавычек или ссылки на переменные)? Если это так, то как я могу поместить пробелы? (с использованием соответствия рег-exp, а не альтернативы)

Спасибо !

Синтаксическая ошибка является самоочевидной, т. Е. Вы использовали ~= вместо =~ .

Что касается шаблона Regex, просто используйте $pat (а также $item ), будучи встроенной оболочкой [[ может обрабатывать разбиение слов:

 item='foobar baz' pat=".+bar baz" if [[ $item =~ $pat ]]; then echo ok fi 

Когда вы используете двойные кавычки вокруг $pat т.е. "$pat" , токены Regex . и + обрабатываются буквально.

Пример:

 $ item='foobar baz'; pat=".+bar baz"; if [[ $item =~ $pat ]]; then echo OK; fi OK