将变量中的字符串与另一个中的字符串完全匹配

时间:2018-08-04 13:52:43

标签: regex linux string bash shell

我有一个句子,不过是一个字符串变量,单词之间用空格隔开。

我还有另一个包含word的变量。我想要的是在包含句子的变量中找到单词的精确匹配。我已经尝试过了:

read -p "enter the word to match " STR # STR contains VVDNSG 

#this DUP_SG_NAME_PUBLIC variable contains a string which consists of few words 
DUP_SG_NAME_PUBLIC=$(aws ec2 describe-security-groups \
  --query 'SecurityGroups[*].{GroupName:GroupName}' \
  --output text) 

if [[ $DUP_SG_NAME_PUBLIC =~ $STR ]]
then 
echo "true"
else 
echo "false"
fi

问题 在这里,我以字符串形式提供了“ VVDN”,但我必须匹配“ VVDNSG”,但是此代码对两者都适用。即使对于VVDN和VVDNSG也是可以理解的。

我想做什么
我想找到完全匹配的结果,如果给定VVDNSG作为STR值,即使使用VVDN,它也应打印true或false,并且我希望使用不带文字字符串的变量进行比较。

我尝试了几个示例,其中大多数都告诉您在文件中查找匹配项或对字符串比较进行硬编码。

1 个答案:

答案 0 :(得分:3)

您的STR用作正则表达式。因此,要将其用作完全匹配项,请显式标记^的开头和$的结尾:

STR="^VVDN$"

然后,if条件仅对STRDUP_SG_NAME_PUBLIC的精确匹配为真。

更新: 实际上,我认为您想要的有所不同-您有一个句子,其中包含用空格分隔的单词(您未提及终止字符),并且您希望匹配其中一个单词,前提是该单词完全匹配。假设单词后有空格或句子末尾有空格,则完全匹配。

在这种情况下,您的正则表达式可能是:

STR="VVDN($| )"

这是你的意思吗?