虽然我几乎肯定这已被覆盖,我似乎找不到任何具体到这个。当我继续我的学习bash的旅程,我不断寻找部分,我不知道为什么事情发生他们的方式。
搜索和替换或只是匹配字符串中的子字符串很可能是编写脚本时做的第一件事。但是,试图坚持使用一种单一的语言或者一组工具很难在bash中做,因为你能够以多种方式解决大多数问题。我正在尽最大努力保持与bash尽可能低的水平。我遇到了一个障碍,我需要有人向我解释。
做子字符串在带有匹配的bash中搜索会根据我使用的正则表达式给出不同的结果,我不知道为什么。
- #!/bin/bash
- Stext="Hallo World"
- echo `expr "$Stext" : '^\(.[a-z]*\)'` # Hallo
- echo `expr "$Stext" : '.*World'` # 11
虽然都搜索一个字,我想,两者都不返回他们发现的东西。为什么?
两个表达式都是等价的,区别是您使用的正则表达式:
- $ echo `expr "$Stext" : '^\(.[a-z]*\)'`
- Hallo
- $ echo `expr "$Stext" : '^.[a-z]*'`
- 5
- $ echo `expr "$Stext" : '\(.*World\)'`
- Hallo World
- $ echo `expr "$Stext" : '.*World'`
- 11
如你所见,括号是返回匹配长度或匹配本身的区别的原因。
你可以在Chapter 10的高级Bash脚本指南中找到更多的例子。