1. 字符串内容替换
${变量#关键字} | 从头开始,将匹配到的最短子串删除 (第一个匹配到的子串删除)删除第1个分隔符及其之前的内容 |
${变量##关键字} | 从头开始,将匹配到的最长子串删除 删除最后1个分隔符及其之前的内容 |
${变量%关键字} | 从尾开始,将匹配到的最短子串删除 |
${变量%%关键字} | 从尾开始,将匹配到的最长子串删除 |
${变量/旧字符串/新字符串} | 替换掉第一个匹配到的旧字符串 |
${变量//旧字符串/新字符串} | 替换掉所有匹配到的旧字符串 |
待处理变量: aa='/aa/bb/aa/cc'
# 从前往后找到/后第一个/,/及其前面的字符全部删除
echo ${aa#/*/} # 最后一个/是分隔符,第一个/代表从其开始,通配符*代表0到无穷多个任意字符
# bb/aa/cc
# 从前往后找到/后最后一个/,/及其前面的字符全部删除
echo ${aa##/*/}
# cc
# 从后往前找到第一个/,/及其后面的字符全部删除
echo ${aa%/*}
# /aa/bb/aa
# 从后往前找到最后一个/,/及其后面的字符全部删除
echo ${aa%%/*}
# 空
# 从前往后将第一个aa替换成AA
echo ${aa/aa/AA}
# /AA/bb/aa/cc
# 从前往后将全部aa替换成AA
echo ${aa//aa/AA}
# /AA/bb/AA/cc
2. 字符串截取
待处理字符串: aa='http://www.baidu.com/123.htm'
1. # 号截取,删除左边字符,保留右边字符。
echo ${aa#*//}
# http://www.baidu.com/123.htm
其中 aa 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
2. ## 号截取,删除左边字符,保留右边字符。
echo ${aa##*/}
http://www.baidu.com/123.htm
##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
3. %号截取,删除右边字符,保留左边字符
echo ${aa%/*}
http://www.baidu.com/123.htm
%/* 表示从右边开始,删除第一个 / 号及右边的字符
4. %% 号截取,删除右边字符,保留左边字符
echo ${aa%%/*}
http://www.baidu.com/123.htm
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
5. 从左边第几个字符开始,指定长度后的删除
echo ${aa:0:5}
http://www.baidu.com/123.htm
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
6. 从左边第几个字符开始,一直到结束。
echo ${aa:7}
http://www.baidu.com/123.htm
其中的 7 表示左边第8个字符开始,一直到结束保留。
7. 从右边第几个字符开始,及字符的个数
echo ${var:0-7:3}
http://www.baidu.com/123.htm
其中的 0-7 表示右边算起第七个字符开始,长度为3的子串保留。
结果是:123
8. 从右边第几个字符开始,一直到结束。
echo ${var:0-7}
http://www.baidu.com/123.htm
表示从右边第七个字符开始,一直到结束。
注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)
3. 变量的测试与内容替换
str: 代表str没设置或为空字符串;str仅表示没有该表量
变量设置方式 | str没有设置 | str为空字符串 | str已设置且非空字符串 |
var=${str-expr} | var=expr | var= | var=$str |
var=${str:-expr} | var=expr | var=expr | var=$str |
var=${str+expr} | var= | var=expr | var=expr |
var=${str:+expr} | var= | var= | var=expr |
var=${str=expr} | str=expr var=expr | str=不变 var= | str=不变 var=$str |
var=${str:=expr} | str=expr var=expr | str=expr var=expr | str=不变 var=$str |
var=${str?expr} | expr输出至stderr | var= | var=str |
var=${str:?expr} | expr输出至stderr | expr输出至stderr | var=str |
实例
# 若变量aa不存在,则返回“11”
aa=${aa-11}
# 变量aa不存在或为空字符串,均返回“11”
aa=${aa:-11}
4. 获取字符串(变量)长度
aa='abc'
# 1.利用wc的-L参数来获取字符串的长度
echo ${aa} | wc -L
# 2. 利用awk的length方法
echo ${aa} | awk '{print length($0)}'
# 3.利用awk的NF项来获取字符串长度
echo ${aa} | awk -F '' '{print NF}'
备注: -F为分隔符,NF为域的个数,即单行字符串的长度
# 4. 利用${#str}来获取字符串的长度
echo ${#aa}
备注: $# 代表后接的参数个数
# 5.利用wc的-c参数,结合echo -n参数
echo -n ${aa} | wc -c
备注: 1) -c参数: 统计字符的个数
2) -n参数: 去除"\n"换行符,不去除的话,默认带换行符,字符个数就成了4
# 6.利用expr的length方法
expr length ${aa}