使用带有字符串的 expr

使用带有字符串的 expr

y=$(expr "$str" : ".*$x" - length "$x") 有人能解释一下这段代码吗?我是脚本新手,对 c++ 和 python 有一些经验。实际上,这个问题是我对之前一个问题的评论的一部分,但我没有得到任何答案。

答案1

expr表达式"$str" : ".*$x"为正则表达式匹配。一般形式为

expr STRING : REGEXP

其中REGEXP锚定正则表达式- “锚定”意味着它尝试REGEX从 的第一个字符开始匹配STRING,因此为了匹配$x其中的任何位置,$str您需要执行类似以下操作:.*从锚点到 的开头匹配所有字符$x

结果是匹配模式的长度 - 包括 匹配的所有内容.*以及 匹配的所有内容$x。所以

expr  "$str" : ".*$x" - length "$x"

$x返回中匹配项的起始索引$str,如果未找到匹配项,则减去 的长度$x。例如:

$ expr foobarbaz : ".*bar" - length bar
3

$ expr foobar : ".*baz" - length baz
-3

请注意,尽管您可能“使用expr字符串”,但它实际上会解释$x为(GNU 基本)正则表达式 - 因此如果它包含除字母数字字符以外的任何内容,请小心。

相关内容