Bash变量的删除、取代与替换

目录
  1. 变量中字符的删除与替换
  2. 变量的测试与替换

作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处: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的值为$str
var=${str:?expr}如果str为null或空字符串,则var的值为null,并且expr输出至stderr;如果str非空则var的值为$str
var=${str:-expr}与第一个“=”的类似,只是expr不赋值给str
var=${str:+expr}与上面“-”的相反
代码实例也参考鸟哥第十章变量内容的测试与替换或者这里