Необходимо сопоставить имена файлов с одинаковыми названиями, присутствующие в переменной, используя регулярное выражение - PullRequest
1 голос
/ 05 апреля 2019

Мне нужно найти строки с одинаковыми именами, которые передаются как переменные bash в шаблон регулярного выражения в интерполированной строке в качестве аргумента функции.Я новичок в Regex, поэтому не уверен, что лучший подход.

Вот что у меня сейчас есть:

bash_script.sh

findKeys(`grep --ignore-case ^${apiServiceName}$`)

Тем не менее, некоторые API имеют схожие имена, например:

apiServiceNames = ['api-name', 'api-name-one', 'api-name-two']

Запутанный бит - это где поставить \ (какие символы нужно экранировать), так как мне нужно ${} для переменной, но открывается $^и закрывает строку.

1 Ответ

2 голосов
/ 05 апреля 2019

Вам не нужно совпадение с регулярным выражением grep или любыми сторонними инструментами. Собственная оболочка bash обеспечивает достаточно сильные возможности для сопоставления с образцом. Например, приведенная ниже конструкция, когда записана как

if [[ $apiServiceName == api-name?(?(-)+(one|two)) ]]; then
    printf '%s - is allowed\n' "$apiServiceName"
fi 

Конструкция api-name?(?(-)+(one|two)) представляет собой расширенный синтаксис сопоставления глобусов, предоставляемый оболочкой, который включается по умолчанию, когда [[..]] используется для сопоставления с шаблоном с оператором ==. Подробнее о extglob

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...