y=$(expr "$str" : ".*$x" - length "$x") 任何人都可以解释这段代码。我是脚本新手,对 C++ 和 python 有一些经验。实际上,这个问题是我对上一个问题的评论的一部分,但我没有得到任何答案。
该expr表达式"$str" : ".*$x"是一个正则表达式的匹配。一般形式是
expr STRING : REGEXP
Run Code Online (Sandbox Code Playgroud)
whereREGEXP是一个锚定的正则表达式——“锚定”意味着它试图REGEX从 的第一个字符开始匹配STRING,所以为了匹配$x里面的任何地方,$str你需要像.*从锚点到开头的所有字符$x
结果是匹配模式的长度 - 包括匹配的.*所有内容以及匹配的所有内容$x。所以
expr "$str" : ".*$x" - length "$x"
Run Code Online (Sandbox Code Playgroud)
返回$xin匹配的起始索引,如果没有找到匹配$str,$x则减去它的长度。例如:
$ expr foobarbaz : ".*bar" - length bar
3
$ expr foobar : ".*baz" - length baz
-3
Run Code Online (Sandbox Code Playgroud)
请注意,尽管您可能“expr与字符串一起使用”,但它实际上会解释$x为(GNU 基本)正则表达式 - 因此,如果它包含字母数字字符以外的任何内容,请务必小心。
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |