我需要找到名称相似的字符串,这些字符串作为bash变量作为函数参数传递给插值字符串中的regex模式。我是Regex的新手,所以不确定最好的方法是什么。
这是我目前拥有的:
bash_script.sh
findKeys(`grep --ignore-case ^${apiServiceName}$`)
但是,某些API具有相似的名称,例如:
apiServiceNames = ['api-name', 'api-name-one', 'api-name-two']
令人困惑的是,在我需要\
作为变量但${}
打开和关闭字符串的地方,放置$^
(要转义的字符)的位置。
答案 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