首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有从Bash5.1中读取BASH_REMATCH的用途是什么?

没有从Bash5.1中读取BASH_REMATCH的用途是什么?
EN

Stack Overflow用户
提问于 2021-01-11 14:47:48
回答 1查看 198关注 0票数 3

我在Bash 5.1发行说明上读到

p. BASH_REMATCH不再是只读的。

正如Bash参考手册中所解释的那样

数组变量BASH_REMATCH记录字符串的哪些部分与模式匹配。索引为0的BASH_REMATCH元素包含字符串中与整个正则表达式匹配的部分。正则表达式中由括号大小的子表达式匹配的子字符串保存在其余的BASH_REMATCH索引中。索引为n的BASH_REMATCH元素是字符串中匹配第n个括号大小子表达式的部分。

是的,访问正则表达式的匹配非常有用:

代码语言:javascript
复制
$ DESERT=pie-cake_berry_cream-sirup
$ [[ $DESERT =~ _(.*)_ ]] && echo "${BASH_REMATCH[1]}"
berry

然而,我看不出这条新闻在Bash 5.1中有什么用。也就是说,BASH_REMATCH不被读取有什么意义?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-12 13:53:15

这个bug bash邮件列表线程中,bashdb ( Bash调试器)的维护者解释说,BASH_REMATCH的值在调试钩子中可能会发生变化,并且由于变量是只读的,因此通过运行重新设置它的命令来重置它,这很棘手,而且很脆弱:

当前在bash5.0和更早版本中,BASH_REMATCH的值可能会在调试钩子中出现。 由于BASH_REMATCH是只读的,重新设置钩子上的值返回到调试程序是有点棘手和脆弱的. ..。 bashdb当前重置BASH_REMATCH的方式是重新发出导致最初设置值的命令。这是脆弱的,因为从设置BASH_REMATCH到上次使用它的时间之间的出口设置是脆弱的。在正则表达式中使用的变量之间可能发生了更改。 ..。 恢复它也同样棘手。我希望你们看到这一切都有点脆弱。

响应中,Chet提供了使其不是只读的:

不如我们让它不是只读的好吗?shell在执行regexp匹配时仍然会设置它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65669036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档