这名称英文和直译都比较不知所云,实际上大概就是字符串变量、数组的匹配赋值
一、${parameter#word} 、 ${parameter##word} ${parameter%word} 、 ${parameter%%word} 去除匹配部分
[root@辛碌力成 ~]# var=abcdabcd
[root@辛碌力成 ~]# echo ${var#a*bc} 从最左开始匹配去除最短匹配的部分
dabcd
[root@辛碌力成 ~]# echo ${var##a*bc} 去除最长匹配的部分
d
[root@辛碌力成 ~]# echo ${var%c*d} 从最右开始匹配去除最短匹配的部分
abcdab
[root@辛碌力成 ~]# echo ${var%%c*d}去除最长匹配部分
ab
二、${parameter/pattern/string} 、${parameter/#pattern/string}替换匹配部分
[root@辛碌力成 ~]# var=abcdabcd
[root@辛碌力成 ~]# echo ${var/b*c/99} 用99去替掉b*c最长匹配的部分
a99d
[root@辛碌力成 ~]# echo ${var/#ab*c/99} 只匹配前缀
99d
三、${parameter:-word}、${parameter:=word}、${parameter:+word} 、${parameter:?word}判断变量是否有值,并根据情况看是否赋值、返回
[root@辛碌力成 ~]# var=abcdefg
[root@辛碌力成 ~]# echo ${var:–new} 如果$var有值则返回其值,否则返回字符串new,不改变$var
abcdefg
[root@辛碌力成 ~]# unset var
[root@辛碌力成 ~]# echo ${var:–new}
new
[root@辛碌力成 ~]# echo $var
[root@辛碌力成 ~]# var=abcdefg
[root@辛碌力成 ~]# echo ${var:=new} 如果$var有值则返回其值,否则将变量$var赋值为字符串new,并返回此值
abcdefg
[root@辛碌力成 ~]# unset var
[root@辛碌力成 ~]# echo ${var:=new}
new
[root@辛碌力成 ~]# echo $var
[root@辛碌力成 ~]# unset var
[root@辛碌力成 ~]# echo ${var:+new} 如果$var无值则返回空,有值则将new赋给$var,并返回其值
[root@辛碌力成 ~]# var=abcd
[root@辛碌力成 ~]# echo ${var:+new}
new
[root@辛碌力成 ~]# echo ${var:?new} 变量$var有值则返回,没有则返回错误,错误信息为new
-bash: var: new
四、${#parameter} 变量长度(字符串或数组长度)
[root@辛碌力成 ~]# var=abcdefg
[root@辛碌力成 ~]# echo ${#var} 变量$var长度值
7
a=(1 2 3 4 5)
[root@辛碌力成 ~]# echo ${#a[@]} 数组加[@],则是元素个数
5
[root@辛碌力成 ~]# echo ${var:2} 从第二个字符之后开始(可以是负数,表示从右数)
cdefg
[root@辛碌力成 ~]# echo ${var:2:3} 从第二个之后开始取三个字符
cde
[root@辛碌力成 ~]# set — 1 2 3 4
[root@辛碌力成 ~]# echo ${@:2} 第2个参数开始
2 3 4
五、${!name[@]}、 ${!name[*]} 返回数组下标
[root@辛碌力成 ~]# name=(1 2 3 4 5)
[root@辛碌力成 ~]# echo ${!name[@]}
0 1 2 3 4
[root@辛碌力成 ~]# echo ${!name[*]}
0 1 2 3 4
如果name是一个数组变量,显示下标,非数组则返回0
原文出自:
http://blog.too2.net/?p=273
转载请注明转自:辛碌力成【http://blog.too2.net】
发表评论