首页 > 解决方案 > 如何使用 if 语句检查 Bash 中两个括号内的内容?

问题描述

我想检查一下括号内的内容。例如,说我有这个

12($s0)

加载到数组中。

现在,我想跳过起始位12(和最后一位),只检查它的长度,$s0.

我不想删掉第一个和最后一个位,只想检查两者之间的内容。

我将如何在 bash 中执行此操作?

标签: bash

解决方案


您可以编写一个正则表达式来捕获括号之间的内容,然后检查该捕获组的长度:

$ str='12($s0)'
$ re='\(([^)]*)\)'
$ [[ $str =~ $re ]]
$ echo "${#BASH_REMATCH[1]}"
3

正则表达式在开头和结尾使用文字括号 ( \(...\));它们之间的所有东西都在一个捕获组((...))中。被捕获的模式是“零个或多个不是右括号的任何字符”:[^)]*

将正则表达式与=~运算符匹配时,捕获组存储在BASH_REMATCH数组中。索引 0 包含完整匹配,索引 1 及以上包含捕获组。我们对第一个感兴趣,并使用#扩展中的 来获取字符串的长度。


推荐阅读