首页IT技术编程 › bash参数扩展(Parameter Expansion)

bash参数扩展(Parameter Expansion)

这名称英文和直译都比较不知所云,实际上大概就是字符串变量、数组的匹配赋值

一、${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】

发表评论