${#variable} 返回$string的长度

${variable:position} 在$string中,从位置$position之后开始提取子串

${variable:position:length} 在$string中,从位置$position之后开始提取长度为$length的子串

${variable#substring} 从变量$string开头开始删除最短匹配$substring子串

${variable##substring} 从变量$string开头开始删除最长匹配$substring子串

${variable%substring} 从变量$string结尾开始删除最短匹配$substring子串

[hdfs@cdh51kdc ~]$ echo ${cc%t*}

Value not set

${variable%%substring} 从变量$string结尾开始删除最长匹配$substring子串

[hdfs@cdh51kdc ~]$ echo ${cc%%t*}

Value not set

 

${variable/substring/replace} 使用replace,来代替第一个匹配的$substring

#!/bin/sh
for i in $(ls |grep "jpg$");
do
    i=${i/finished/};echo $i
done

结果:

[root@localhost ~]# sh for2.sh 
stu_10299_1_.jpg
stu_10299_2_.jpg
stu_10299_3_.jpg
stu_10299_4_.jpg
stu_10299_5_.jpg

${variable/#substring/replace} 如果$string前缀匹配$substring,就用$replace来代替匹配$substring

${variable/%substring/replace} 如果$string结尾匹配$substring,就用$replace来代替匹配$substring

#!/bin/sh
for i in $(ls |grep "jpg$");
do
i=${i/%jpg/mp4}
done

结果:

[root@localhost ~]# sh for2.sh 
stu_10299_1_.mp4
stu_10299_2_.mp4
stu_10299_3_.mp4
stu_10299_4_.mp4
stu_10299_5_.mp4

五、变量替换


${value:-word} 如果变量value有赋值,则使用value的值,如果value没有赋值,则用后面的word给value赋值

${value-word} 如果变量value有赋值,则使用value的值,如果value没有赋值或为空,则返回word并用word给value赋值

${value:=word} 如果变量value有赋值,则使用value的值,如果value没有赋值,则用后面的word给value赋值

${value:+word} 如果value有赋值,则用word给value重新赋值,如果value没有赋值,则返回null。

${value:?"not defined"} 如果value没有赋值,则返回后面定义的错误,如果value有赋值,则什么都不返回。用来测试变量是否有值