${变量名称#匹配字符}

若变量内容从开始被匹配字符匹配到,刚从变量内容的左边开删除,但删除匹配最短的

${变量名称##匹配字符}

若变量内容从开始被匹配字符匹配到,刚从变量内容的左边开删除,但删除匹配最长的。

${变量名称%匹配字符}

若变量内容从尾到前被匹配字符匹配到,刚从变量内容的尾部开始删除,但删除匹配最短的

${变量名称%%匹配字符}

若变量内容从尾到前被匹配字符匹配到,刚从变量内容的尾部开始删除,但删除匹配最短的

${变量称/旧字符串/新字符串}

从变量内容的左边开始匹配,用新字符串替换旧字符串,仅替换第一个匹配到的字符串

${变量称//旧字符串/新字符串}

从变量内容的左边开始匹配,用新字符串替换旧字符串,全部替换匹配到的字符串


例子:

声明一个变量为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的字符串


wKiom1aYr0rAaG4dAAAScJ8rdOw492.png


linux变量替换、字符串操作_第1张图片

${变量-默认值} 如果变量没有被声明, 那么就以默认值作为其值 
${变量:-默认值} 如果变量没有被声明, 或者其值为空, 那么就以默认值作为其值
${变量=默认值} 如果变量没有被声明, 那么就以默认值作为其值并且变量被赋值为默认值
${变量:=默认值} 如果var没有被声明, 或者其值为空, 那么就以默认值作为其值并且变量被赋值为默认值
${变量+默认值} 如果变量声明了, 那么其值就是默认值, 否则就为null字符串
${变量:+默认值} 如果变量被设置了, 那么其值就是默认值, 否则就为null字符串
${变量?错误信息} 如果变量没被声明, 那么就打印错误信息
${变量:?错误信息} 如果变量没被设置, 那么就打印错误信息




linux变量替换、字符串操作_第2张图片


linux变量替换、字符串操作_第3张图片


linux变量替换、字符串操作_第4张图片