首页 > 解决方案 > 需要使用正则表达式匹配变量中存在的类似标题的文件名

问题描述

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

这是我目前拥有的:

bash_script.sh

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

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

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

令人困惑的一点是\我需要${}放置变量的位置(要转义的字符),但会$^打开和关闭一个字符串。

标签: regexbash

解决方案


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

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

该构造是由 shell 提供的扩展 glob 匹配语法,在用于与运算符进行模式匹配api-name?(?(-)+(one|two))时默认启用。查看更多关于extglob[[..]]==


推荐阅读