1.字符串长度(string length)和字符串截取
${string:position:length} ##从指定位置输出指定长度的字符 var=1234567890 echo ${#var} ${var:2} ${var:-4} ${var:(-4)} ${var:1:3} > 10 34567890 1234567890 7890 234 类似字符串的处理还有awk echo |awk '{print substr("'"${var}"'",2,3)}' > 234 ##awk在字符编号上和bash有所不同,awk从1开始编号,bash从0开始编号 echo |awk '{print index("'"${var}"'","234")}' > 2 ##匹配字符串出现的位置 vim position.sh #!/bin/bash echo "${#*} | ${*:2} | ${*:(-2)} | ${*:2:3}" ./position.sh 1 2 3 4 5 6 7 8 9 0 10 | 2 3 4 5 6 7 8 9 0 | 9 0 | 2 3 4 ##${*}代表全部的位置参数,也可以用【:】来进行处理
2.字符删除
${string#substring} ##从头开始匹配,删除匹配到的最短的substring
${string##substring} ##从头开始匹配,删除匹配到的最长的substring
${string%substring} ##从尾开始匹配,删除匹配到的最短的substring
${string%%substring} ##从尾开始匹配,删除匹配到的最长的substring
## 特别需要注意的是以上匹配内容必须从首字符或者尾字符开始
var=123abc123abc123
echo ${var#*a} ${var##*a} ${var%*a} ${var%%*a}
x='*c'
echo ${var##$x} ##匹配字符串可以用变量代替
> 123
##给txt重新命名
suff=txt;SUFF=TXT;for i in $(ls *.$suff);do mv ${i} ${i%.$suff}.$SUFF;done
3.字符替换(substring)
${string/substring/replacement} ##替换从头开始第一个匹配的字符串 ${string//substring/replacement} ##替换全部满足条件的字符串 ${string/#substring/replacement} ##替换从头第一个字符就匹配的字符串 ${string/%substring/replacement} ##替换从尾第一个字符就匹配的字符串 var=abc123ABC123abc123ABC echo ${var/abc/ABC} ${var//abc/ABC} ${var/#abc/ABC} ${var/%abc/ABC} > ABC123ABC123abc123ABC ABC123ABC123ABC123ABC ABC123ABC123abc123ABC abc123ABC123abc123ABC echo ${var//abc/} ${var/abc/} ## 替换字符为空时候可以用于删除匹配字符 > 123ABC123123ABC 123ABC123abc123ABC ##删除全部匹配字符和头部匹配字符
以上是匹配部分字符替换,还有参数替换用来处理和扩展变量【-】【:-】【=】【:=】【+】【:+】,在开始下面的参数替换的讲解以前,先要说明变量未声明、变量声明以及变量声明但未定义着三者的分类关系,后两者被认为是变量声明了,变量存在,前者变量不存在!
${parameter-default}, ${parameter:-default} var1=1 var2=2;echo ${var1-$var2} ${var3-$var2} > 1 2 var4=;echo ${var4-$var2} ${var4:-$var2} > 2 ##在变量未被声明的时候【-】符号后的内容被认为是缺省时的默认值 ##变量声明了但是内容为空,不是缺省,【-】符号不会起作用,【:-】才会起作用 ##和【-】符号作用相似的还有【=】符号,【=】符号和【-】符号最大的区别在于【=】会赋值! var4=;echo ${var4-$var2} ${var4:-$var2} ${var4} > 2 var4=;echo ${var4=$var2} ${var4:=$var2} ${var4} > 2 2 ##【+】符号和【-】符号作用在处理声明和未声明变量的时候作用基本相反。 ##【+】符号会给声明了得变量替换 ##【:+】也会在变量声明了但为空的情况下出现反作用,不会替换 var=1 var2=2 var3=3 var4= echo "${var3+$var2};${var3:+$var2};${var4+$var2};${var4:+$var2};${var5+$var2};${var5:+$var2}" > 2;2;2;;;
4.变量判断
##${var?Error Messages}判断变量是否存在,不存在输出Error Messages并返回错误状态1 vim position.sh echo "${1?$0 usage arguments}" ./position.sh xyz;echo $? > xyz > 0 ./position.sh;echo $? > ./position.sh: line 1: 1: ./position.sh usage arguments > 1
5.查询已声明变量
##${!varprefix*} ${!varprefix@} 匹配以varprefix开头的已声明变量 VARIABLE1=1 VARIABLE2=2 VARIABLE= echo ${!VARIABLE*} > VARIABLE VARIABLE1 VARIABLE2 ##即使是空变量,只要被声明了就能匹配 echo ${!BASH*} ##匹配与BASH有关的环境变量 > BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION
6.特殊的变量扩展,大小写转换
a=xYzS echo "${a^} | ${a^^} | ${a,} | ${a,,}" #第一个字符变成大写,全部字符大写,第一个字符变成小写,全部字符小写 > XYzS | XYZS | xYzS | xyzs