本文详细介绍一下Bash shell字符串操作的有关内容。
首先需要明白的一点是我们通常所用的变量替代 $varname 其实是 ${varname}的一种简写形式。
其次,需要知道字符串操作的核心思想是:Bash shell字符串操作是通过在变量名'varname'和闭花括号'}'之间插入操作符来完成的。
在明确了以上2点以后,我们就可以开始学习Bash shell字符串操作的相关内容了。本文分为四部分进行介绍。
- 替换操作符
- ${varname:-word}
- 含义:如果变量varname存在且非空, 返回变量的值;否则返回值word。
- 目的:如果变量未定义,则返回默认值word。
- 举例:如果变量count未定义,则:${count:-0}的值为0.
- ${varname:=word}
- 含义:如果变量varname存在且非空,返回变量的值;否则将变量的值设为值word后返回变量的值。
- 目的:如果变量varname未定义,则将其设置为默认值word.
- 举例:如果变量count未定义,则将其设为0
- ${varname:+word}
- 含义:如果变量varname存在且非空,返回值word;否则返回null。
- 目的:测试变量varname是否存在。
- 举例:如果变量count存在,返回1(表示存在)
- ${varname:?message}
- 含义:如果变量varname存在且非空,返回变量的值;否则打印信息"varname: message";如果message没有指定,则显示parameter null or not set。
- 目的:如果变量未定义,则打印错误信息。
- 举例:如果变量count未定义,打印消息"count: undefined!
- ${varname:offset:length}
- 含义:返回变量varname的子字符串,开始位置为offset,长度为length。注意索引开始位置为0。
- 目的:返回子字符串。
- 举例:如果变量count的值为 frogfootman,则:
- ${varname:-word}
- 模式匹配操作符
- ${varname#pattern}
- 含义:如果pattern匹配变量varname值的开始部分,删除最小 的匹配部分并且返回变量剩余部分内容。
- 举例:
- ${varname##pattern}
- 含义:如果pattern匹配变量varname值的开始部分,删除最大 的匹配部分并且返回变量剩余部分内容。
- 举例:
- ${varname%pattern}
- 含义:如果pattern匹配变量varname值的结尾部分,删除最小 的匹配部分并且返回变量剩余部分内容。
- 举例:
- ${varname%%pattern}
- 含义:如果pattern匹配变量varname值的结尾部分,删除最大 的匹配部分并且返回变量剩余部分内容。
- 举例:
- ${varname/pattern/string}
- 含义:用值string替换varname中模式pattern可以匹配到的最大部分。仅替换第一次匹配。
- 举例:
- ${varname//pattern/string}
- 含义:用值string替换varname中模式pattern可以匹配到的最大部分。全局匹配。
- 举例:
- ${varname#pattern}
- 变量长度
- ${#varname}
- 含义:获取变量varname值长度。
- 举例:
- ${#varname}
- 扩展模式匹配操作府
- 注意:使用扩展模式匹配操作符时,shopt extglob必须为on .
- *(patternlist)
- 含义:匹配patternlist中0个或多个pattern
- 举例:
- +(patternlist)
- 含义:匹配patternlist中1个或多个pattern
- 举例:
- ?(patternlist)
- 含义:匹配patternlist中0各或1个patter
- @(patternlist)
- 含义:匹配patterlist中的1个pattern.
- 举例:
- !(patternlist)
- 含义:匹配patterlist中所有pattern之外的pattern。
- 举例:
- 注意:使用扩展模式匹配操作符时,shopt extglob必须为on .
如对本文内容有任何问题,欢迎随时联系作者。
谢谢!