Bash变量的删除、取代与替换
作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/
Bash提供了一些操作变量的功能,可以使用很短的表达式来操作变量。由于bash变量的内容大部分为字符串,所以这些功能就可以非常方便地操作变量中保存的字符串,如删除部分字符,替换部分字符。另外bash还提供了用于测试变量是否设置的功能。
变量中字符的删除与替换
变量设置方式 | 说明 |
---|---|
${变量#关键字} ${变量##关键字} |
若变量内容从头开始的数据符合“关键字”,则将符合的最短数据删除。 若变量内容从头开始的数据符合“关键字”,则将符合的最长数据删除。 |
${变量%关键字} ${变量%%关键字} |
若变量内容从尾向前的数据符合“关键字”,则将符合的最短数据删除。 若变量内容从尾向前的数据符合“关键字”,则将符合的最长数据删除。 |
${变量/旧字符串/新字符串} ${变量//旧字符串/新字符串} |
若变量内容符合“旧字符串”,则第一个旧字符串会被新字符串替换。 若变量内容符合“旧字符串”,则全部的旧字符串会被新字符串替换。 |
除了上述变量设置方式,还有如下用法:
${var:num}在var中提取第num个字符到末尾的所有字符。
若num为正数,从左边0处开始;若num为负数,从右边开始提取字串,但必须使用在冒号后面加空格或一个数字或整个num加上括号,如${var: -2}、${var:1-3}或${var:(-2)}。
${var:num1:num2}表示从$var字符串的第$num1个位置开始提取长度为$num2的子串。
num1是位置,num2是长度,不能为负数。
${#var}获取var变量的长度。
代码实例参考鸟哥第十章变量内容的删除与取代。
变量的测试与替换
var=${str:=expr}
如果str为null或空字符串,则var的值为expr,并且expr赋值给str;如果str非空则var的值为$strvar=${str:?expr}
如果str为null或空字符串,则var的值为null,并且expr输出至stderr;如果str非空则var的值为$strvar=${str:-expr}
与第一个“=”的类似,只是expr不赋值给strvar=${str:+expr}
与上面“-”的相反
代码实例也参考鸟哥第十章变量内容的测试与替换或者这里。