zsh - $BASH_REMATCH[] 的 zsh 等价物是什么?
问题描述
zsh
for中的等价物是什么$BASH_REMATCH
,它是如何使用的?
解决方案
要使zsh
行为与 相同bash
,请使用:
setopt BASH_REMATCH
或者在一个函数中考虑:
setopt local_options BASH_REMATCH
(这只会在函数范围内设置选项)
然后就像$BASH_REMATCH
你在bash
.
该手册说BASH_REMATCH
:
设置后,使用 =~ 运算符执行的匹配将设置 BASH_REMATCH 数组变量,而不是默认的 MATCH 和匹配变量。BASH_REMATCH 数组的第一个元素将包含整个匹配的文本,后续元素将包含提取的子字符串。当 KSH_ARRAYS 也设置时,此选项更有意义,因此整个匹配部分存储在索引 0 处,第一个子字符串位于索引 1 处。没有此选项,MATCH 变量包含整个匹配的文本,匹配数组变量包含子字符串.
然后=~
会表现得像 in ,但如果你想要手册bash
中描述的完整行为:
字符串 =~ 正则表达式
如果字符串与正则表达式 regexp 匹配,则为 true。如果设置了选项 RE_MATCH_PCRE regexp 使用 zsh/pcre 模块作为 PCRE 正则表达式进行测试,否则使用 zsh/regex 模块作为 POSIX 扩展正则表达式进行测试。匹配成功后,一些变量会被更新;如果匹配失败,则不会更改任何变量。
如果未设置 BASH_REMATCH 选项,则标量参数 MATCH 设置为与模式匹配的子字符串,整数参数 MBEGIN 和 MEND 分别设置为字符串中匹配项的开始和结束索引,这样如果包含字符串在变量 var 中,表达式 '${var[$MBEGIN,$MEND]}' 与 '$MATCH' 相同。遵循选项 KSH_ARRAYS 的设置。同样,数组 match 设置为匹配括号内的子表达式的子字符串,数组 mbegin 和 mend 分别设置为字符串中子字符串的开始和结束位置的索引。如果没有带括号的子表达式,则不会设置数组。例如,如果字符串 'a short string' 与正则表达式 's(...)t' 匹配,则(假设未设置选项 KSH_ARRAYS)MATCH,
如果设置了选项 BASH_REMATCH,则数组 BASH_REMATCH 设置为匹配模式的子字符串,后跟匹配模式中带括号的子表达式的子字符串。
推荐阅读
- firebase - Firebase Analytics 无法找到所有项目
- c# - linq通过分组选择最新记录的列列表时如何防止“对象引用未设置为对象的实例”?
- ios - 我想使用 JTAppleCalender 库显示一个简单的日历,但它显示的是一个空屏幕
- java - 对于持久本地存储,Android Room 与 Cloud Firestore 相比有何优势?
- wpf - XamSchedule (WPF):使用滚动条显示更多周
- c# - MSQM 使用二进制格式化程序发送具有字节数组属性的可序列化消息
- asp.net-mvc - 在我的操作中使用 TempData 时发生序列化错误
- odbc - Julia ODBC 连接在 Jupyter 中产生弹出窗口
- sql - 如何插入 sql 并跳过已经存在的内容?
- symfony - 模板中不存在变量实体,如何解决?