${变量名称#匹配字符} | 若变量内容从开始被匹配字符匹配到,刚从变量内容的左边开删除,但删除匹配最短的 |
${变量名称##匹配字符} | 若变量内容从开始被匹配字符匹配到,刚从变量内容的左边开删除,但删除匹配最长的。 |
${变量名称%匹配字符} | 若变量内容从尾到前被匹配字符匹配到,刚从变量内容的尾部开始删除,但删除匹配最短的 |
${变量名称%%匹配字符} | 若变量内容从尾到前被匹配字符匹配到,刚从变量内容的尾部开始删除,但删除匹配最短的 |
${变量称/旧字符串/新字符串} | 从变量内容的左边开始匹配,用新字符串替换旧字符串,仅替换第一个匹配到的字符串 |
${变量称//旧字符串/新字符串} | 从变量内容的左边开始匹配,用新字符串替换旧字符串,全部替换匹配到的字符串 |
例子:
声明一个变量为value并给value赋值root:x:0:0:root:/root:/bin/bash
value=root:x:0:0:root:/root:/bin/bash
echo ${value#*/} 从开始到第一个/前所有内容删除(*为通配符)
过程root:x:0:0:root:/root:/bin/bash
结果root:/bin/bash
echo ${value##*/} 从开始到最后一个/前的内容删除
过程root:x:0:0:root:/root:/bin/bash
结果bash
echo ${value%/*} 从变量尾部向前,匹配第一个/的内容删除
过程root:x:0:0:root:/root:/bin/bash
结果root:x:0:0:root:/root:/bin
echo ${value%%/*} 从变量尾部向前,匹配最后一个/之前的内容删除
过程root:x:0:0:root:/root:/bin/bash
结果root:x:0:0:root:
echo ${value/root/test}
过程root:x:0:0:root:/root:/bin/bash 第一个root将被test替换
结果test:x:0:0:root:/root:/bin/bash
echo ${value//root/test}
过程root:x:0:0:root:/root:/bin/bash 所有root将被test替换
结果test:x:0:0: test:/ test:/bin/bash
${#string} | 字符串长度 |
${string: 起始位} | 从字符串起始位开始截取字符串 |
${string:起始位:lenght} | 从字符串起始位开始截取长度为lenght的字符串 |
${变量-默认值} | 如果变量没有被声明, 那么就以默认值作为其值 |
${变量:-默认值} | 如果变量没有被声明, 或者其值为空, 那么就以默认值作为其值 |
${变量=默认值} | 如果变量没有被声明, 那么就以默认值作为其值并且变量被赋值为默认值 |
${变量:=默认值} | 如果var没有被声明, 或者其值为空, 那么就以默认值作为其值并且变量被赋值为默认值 |
${变量+默认值} | 如果变量声明了, 那么其值就是默认值, 否则就为null字符串 |
${变量:+默认值} | 如果变量被设置了, 那么其值就是默认值, 否则就为null字符串 |
${变量?错误信息} | 如果变量没被声明, 那么就打印错误信息 |
${变量:?错误信息} | 如果变量没被设置, 那么就打印错误信息 |