${varible#*string} 从左往右,删除最短的一个以string结尾的子串,即截取第一个string子串之后的字符串
${varible##*string} 从左往右,删除最长的一个以string结尾的子串,即截取最后一个string子串之后的字符串
${varible%string*} 从右往左,删除最短的一个以string开头的子串,即截取最后一个string子串之前的字符串
${varible%%string*} 从右往左,删除最长的一个以string开头的子串,即截取第一个string子串之前的字符串
例如:
export TEST=123abc456abc789
echo ${TEST#*abc} ===>删掉123abc剩下456abc789
echo ${TEST##*abc} ===>删掉123abc456abc剩下789
echo ${TEST%abc*} ===>删掉abc789剩下123abc456
echo ${TEST%%abc*} ===>删掉abc456abc789剩下123
${varible:start:len}:截取变量varible从位置start开始长度为len的子串。第一个字符的位置为0。
例如:
export TEST=123abc456abc789
echo ${TEST:0:3} ===>"123"
echo ${TEST:3:3} ===>"abc"
似乎好像可能bash不能直接获取字符串的某一个个字符,所以如果要取某个字符,比如取第3个字符,就只能使用${TEST:2:1}。
替换一个
echo ${TEST/abc/def} ===>"123def456abc789"
替换所有
echo ${TEST//abc/def} ===>"123def456def789"
echo ${#TEST} ===>15
从1开始计数,匹配开头时返回1,没查找到返回0
expr index $TEST '123' ===>1
转大写:echo ${s^^}
转小写:echo ${s,,}
有则返回,无则取默认值:echo ${s:-haha}
有则返回,无则报错:echo ${s:?haha}
变量有定义,返回+号后的内容,无定义则忽略:echo ${s:+haha}
特别注意:echo ${s: -1}与echo ${s:-1}的差别,只是冒号后是否有空格之差,前者表示取s末尾子串,跟python里的s[-1:]概念一样,后者表示s没定义,就返回1。
生成长度为4的随机数,因为RANDOM是0到32767,此处不足补零:num4=`echo ${RANDOM:0:4} | xargs printf '%.04d'`