bash - 如何使用 if 语句检查 Bash 中两个括号内的内容?
问题描述
我想检查一下括号内的内容。例如,说我有这个
12($s0)
加载到数组中。
现在,我想跳过起始位12(
和最后一位)
,只检查它的长度,$s0
.
我不想删掉第一个和最后一个位,只想检查两者之间的内容。
我将如何在 bash 中执行此操作?
解决方案
您可以编写一个正则表达式来捕获括号之间的内容,然后检查该捕获组的长度:
$ str='12($s0)'
$ re='\(([^)]*)\)'
$ [[ $str =~ $re ]]
$ echo "${#BASH_REMATCH[1]}"
3
正则表达式在开头和结尾使用文字括号 ( \(...\)
);它们之间的所有东西都在一个捕获组((...)
)中。被捕获的模式是“零个或多个不是右括号的任何字符”:[^)]*
。
将正则表达式与=~
运算符匹配时,捕获组存储在BASH_REMATCH
数组中。索引 0 包含完整匹配,索引 1 及以上包含捕获组。我们对第一个感兴趣,并使用#
扩展中的 来获取字符串的长度。
推荐阅读
- xml - 一对多表关系
- python - 根据其他列表中的值对列表中的列表进行排序
- lua - 如何在 Lua 中获取本地时间作为格式化字符串
- javascript - 根据 div 标签的数据属性值创建 HTML 列表?
- sql - 选择最大值,但优先考虑某些值
- django - 将日期与其他模型中的最小终值进行比较
- jquery - 如何使用 Jquery 拖放多个项目(使用复选框选择)?
- python - 在 R 中打印 Python 生成的图
- django - Django url 与 wagtail 页面 url
- php - Opencart Elasticsearch - 致命错误:类 'Monolog\\Logger' 未在