linux parameter substitution - 字符串/变量处理
【基本介绍】
这里我们介绍bash里面对字符串,变量等的替换等操作。
【基本用法】
shellparametersubstitution
1.${parameter}
2.${parameter-default}${parameter:-default}
3.${parameter=default}${parameter:=default}
4.${parameter+alt_value}${parameter:+alt_value}
5.${parameter?err_msg}${parameter:?err_msg}
6.${#parameter}
7.${var#pattern}${var##pattern}
8.${var%pattern}${var%%pattern}
9.${var:pos}${var:pos:len}
10.${var/pattern/replacement}${var//pattern/replacement}${var/#Pattern/Replacement}${var/%Pattern/Replacement}
11.${!varprefix*},${!varprefix@}
1.变量值-不解释了
[root@sparkVM tmp]# cat 1.sh parameter='test' echo $parameter #test echo ${parameter} #test
2.默认值
[root@sparkVM tmp]# cat 2.sh echo ${parameter-default} #变量没有定义的时候使用默认值 echo ${parameter:-default} echo ${parameter=default} echo ${parameter:=default} parameter= echo ${parameter-default} #变量定义了,但是是空值, echo ${parameter:-default} # :- :=都继续用默认值 , 其他就是空值 echo ${parameter=default} echo ${parameter:=default} parameter='test' #变量定义了值,都使用变量的值 echo ${parameter-default} echo ${parameter:-default} echo ${parameter=default} echo ${parameter:=default} [root@sparkVM tmp]# bash 2.sh default default default default default default test test test test
3.有值就取默认,没有定义就空
[root@sparkVM tmp]# cat 3.sh echo 1, ${parameter+default} #没有定义变量,输出空 echo 2, ${parameter:+default} parameter= echo 3, ${parameter+default} #定义了变量,但是为空 echo 4, ${parameter:+default} #:+还是使用原来值,+使用默认值 parameter='test' echo 5, ${parameter+default} #定义了变量,不为空 echo 6, ${parameter:+default} #使用默认值 [root@sparkVM tmp]# bash 3.sh 1, 2, 3, default 4, 5, default 6, default
4.有值无值判断
[root@sparkVM tmp]# cat 4.sh parameter='test' echo 1, ${parameter?default} #变量值定义 不为空,输出变量值 echo 2, ${parameter:?default} parameter= echo 3, ${parameter?default} #变量值定义,为空, ?输出变量值,:?判断为无变量值 #echo ${parameter:?default} unset parameter #echo 4, ${parameter?default} #无变量值,报错提示:default #echo 5, ${parameter:?default} [root@sparkVM tmp]# bash 4.sh 1, test 2, test 3,
5.变量长度-不解释
[root@sparkVM tmp]# cat 5.sh echo ${#parameter} parameter= echo ${#parameter} parameter='test' echo ${#parameter} [root@sparkVM tmp]# bash 5.sh 0 0 4
6.变量截取
[root@sparkVM tmp]# cat 6.sh var1=abcd12345abc6789 echo ${var1} echo ${var1#a*c} #‘#’是从左往右截取 #最短匹配 ##最长匹配 echo ${var1##a*c} echo ${var1%a*c} #‘#/%’如果最左或者最右开头没有匹配的,那么输出源 echo ${var1%%a*c} echo ${var1%b*9} # ‘%’是从右往左截取 %最短匹配 %%最长匹配 echo ${var1%%b*9} [root@sparkVM tmp]# bash 6.sh abcd12345abc6789 d12345abc6789 6789 abcd12345abc6789 abcd12345abc6789 abcd12345a a
7.变量长度截取
[root@sparkVM tmp]# cat 7.sh var='abcdefghijklmn' echo ${var:2} #索引从2开始到结尾,初始为0 echo ${var:2:5} #索引从2开始,长度为5 [root@sparkVM tmp]# bash 7.sh cdefghijklmn cdefg
8.变量替换
[root@sparkVM tmp]# cat 8.sh var='abcdefghijklmncdefj' echo ${var/cde/CDE} #${var/Pattern/Replacement} 替换第一次匹配 echo ${var//cde/CDE} #${var//Pattern/Replacement} 全局替换 echo ${var/#abc/ABC} #‘#’从最左边开始匹配 echo ${var/%efj/EFJ} # '%'从最右边开始匹配 echo ${var/#cde/CDE} echo ${var/%cde/CDE} #最右边没有匹配,输出源 [root@sparkVM tmp]# bash 8.sh abCDEfghijklmncdefj abCDEfghijklmnCDEfj ABCdefghijklmncdefj abcdefghijklmncdEFJ abcdefghijklmncdefj abcdefghijklmncdefj
9.变量匹配
[root@sparkVM tmp]# cat 9.sh # This is a variation on indirect reference, but with a * or @. # Bash, version 2.04, adds this feature. xyz23=whatever xyz24= a=${!xyz*} # Expands to *names* of declared variables # ^ ^ ^ + beginning with "xyz". echo "a = $a" # a = xyz23 xyz24 a=${!xyz@} # Same as above. echo "a = $a" # a = xyz23 xyz24 echo "---" abc23=something_else b=${!abc*} echo "b = $b" # b = abc23 c=${!b} # Now, the more familiar type of indirect reference. echo $c # something_else [root@sparkVM tmp]# bash 9.sh a = xyz23 xyz24 a = xyz23 xyz24 --- b = abc23 something_else
【参考引用】
http://tldp.org/LDP/abs/html/parameter-substitution.html#PARAMSUBREF