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} #test2.默认值
[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
test3.有值就取默认,没有定义就空
[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, default4.有值无值判断
[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
46.变量截取
[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
a7.变量长度截取
[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
cdefg8.变量替换
[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
abcdefghijklmncdefj9.变量匹配
[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