需要使用正则表达式匹配变量中存在的标题相似的文件名

时间:2019-04-05 10:05:24

标签: regex bash

我需要找到名称相似的字符串,这些字符串作为bash变量作为函数参数传递给插值字符串中的regex模式。我是Regex的新手,所以不确定最好的方法是什么。

这是我目前拥有的:

bash_script.sh

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

但是,某些API具有相似的名称,例如:

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

令人困惑的是,在我需要\作为变量但${}打开和关闭字符串的地方,放置$^(要转义的字符)的位置。

1 个答案:

答案 0 :(得分:2)

您不需要与grep或任何第三方工具进行正则表达式匹配。本机bash shell提供了足够强大的功能来进行模式匹配。例如下面的结构写为

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

构造api-name?(?(-)+(one|two))是外壳程序提供的扩展的glob匹配语法,默认情况下,当[[..]]用于==运算符的模式匹配时启用。进一步了解extglob