gpt4 book ai didi

bash - 在 Bash 中,是否可以将包含通配符的字符串变量匹配到另一个字符串

转载 作者:行者123 更新时间:2023-12-05 00:51:44 26 4
gpt4 key购买 nike

我正在尝试将字符串与从文件中读取的其他字符串列表进行比较。

但是文件中的某些字符串包含通配符(包括 ? 和 *),在匹配时需要考虑这些字符。

我可能遗漏了一些东西,但我不知道该怎么做

例如。

我在一个数组中有来自文件的字符串,它可以是任何带有通配符的字母数字(包括逗号和句号):(a?cd, xy, q?hz, j,h-??)

我还有另一个字符串,我希望依次与列表中的每个项目进行比较。任何字符串都可以包含空格。

所以我想要的是类似的东西

teststring="abcdx.rubb ish,y"

matchstrings=("a?cd" "*x*y" "q?h*z" "j*,h-??")

for i in "${matchstrings[@]}" ; do

if [[ "$i" == "$teststring" ]]; then # this test here is the problem
<do something>
else
<do something else>
fi
done

这应该匹配第二个“匹配字符串”,但不匹配任何其他的

任何帮助表示赞赏

最佳答案

是的;您只需将 == 的两个操作数颠倒过来; glob 在右边(并且不能被引用):

if [[ $teststring == $i ]]; then

例子:

$ i=f*
$ [[ foo == $i ]] && echo pattern match
pattern match

如果您引用参数扩展,则该操作被视为文字字符串比较,而不是模式匹配。

$ [[ foo == "$i" ]] || echo "foo != f*"
foo != f*

模式中的空格不是问题:

$ i="foo    b*"
$ [[ "foo bar" == $i ]] && echo pattern match
pattern match

关于bash - 在 Bash 中,是否可以将包含通配符的字符串变量匹配到另一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71363873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com