码迷,mamicode.com
首页 > 其他好文 > 详细

变量内容的删除、取代与替换

时间:2015-04-03 19:40:55      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:linux   shell   变量   替换   取代   

变量内容的删除与取代

1)${变量#关键词}:从变量开头开始检索与关键词匹配的数据,将匹配的最短数据删除。

例:

[root@xiaoxiao abc]# echo $PATH

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@xiaoxiao abc]# echo ${PATH#*:}

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@xiaoxiao abc]# echo ${PATH#/*local/sbin:}

/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin


关键词可以包括一般字符与通配符,例子中从PATH变量从左向右检索,能和关键词”*:“,“/*local/sbin:“匹配的最短数据是“/usr/local/sbin:“,“/usr/lib64/qt-3.3/bin:/usr/local/sbin:”,然后将匹配到的数据删除。


2)${变量##关键词}:从变量开头开始检索与关键词匹配的数据,将匹配的最长数据删除。

例:

[root@xiaoxiao abc]# echo $PATH

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@xiaoxiao abc]# echo ${PATH##/*:}

/root/bin


能和关键词”/*:“匹配的最长数据是”/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:“,然后就只剩下了”/root/bin“。


3)${变量%关键词}:从变量尾部开始检索与关键词匹配的数据,将匹配的最短数据删除。

例:

[root@xiaoxiao abc]# echo $PATH

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@xiaoxiao abc]# echo ${PATH%:/usr*bin}

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin


不解释了和上面一样,只是从右向左匹配


4)${变量%%关键词}:从变量尾部开始检索与关键词匹配的数据,将匹配的最长数据删除。

例:

[root@xiaoxiao abc]# echo $PATH

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@xiaoxiao abc]# echo ${PATH%%/bin:*bin}

/usr/lib64/qt-3.3


从右向左删除最长匹配数据。



变量的测试与替换

在写脚本时我们常常需要判断一个变量是否已经被赋值,若没有,则给予一个常量。下面来看一个例子:

[baby@xiaoxiao mytest]$ echo $abc

                                                    <--没有值输出

[baby@xiaoxiao mytest]$ name=baby

[baby@xiaoxiao mytest]$ username=${abc-$name}

[baby@xiaoxiao mytest]$ echo $username

baby                                                <--name的值赋值给了username


上述例子中由于abc没有值,就把“-”号后面的name值赋值给了username,当然减号后面也可以直接跟字符串。如下:

[baby@xiaoxiao mytest]$ username=${abc-xiaoxiao}

[baby@xiaoxiao mytest]$ echo $username

xiaoxiao


上述中abc没有被赋值,若abc已经被设置成空值,则这个空值将会被赋值给username。如下:

[baby@xiaoxiao mytest]$ abc=""

[baby@xiaoxiao mytest]$ unset username

[baby@xiaoxiao mytest]$ username=${abc-xiaoxiao}

[baby@xiaoxiao mytest]$ echo $username

                                                    <--输出的是空字符串

[baby@xiaoxiao mytest]$ 


这时用“:-”即可,没有被赋值或者空字符串的变量都会被减号后面的变量替换。

[baby@xiaoxiao mytest]$ unset username

[baby@xiaoxiao mytest]$ abc=""

[baby@xiaoxiao mytest]$ username=${abc:-xiaoxiao}

[baby@xiaoxiao mytest]$ echo $username

xiaoxiao


这两个是经常使用的,下面是变量设定方式的一些整理:

变量设定方式str没有设定str为空字符串str已设定为非空字符串
var=${str-expr}var=exprvar=var=$str
var=${str:-expr}
var=exprvar=exprvar=$str
var=${str+expr}
var=var=exprvar=expr
var=${st:+expr}
var=var=var=expr
var=${str=expr}
str=expr
var=expr
str不变
var=
str不变
var=$str
var=${str:=expr}
str=expr
var=expr
str=expr
var=expr
str不变
var=$str
var=${str?expr}
expr输出至stderrvar=var=$str
var=${str:?expr}
expr输出至stderr
expr输出至stderrvar=$str


以上所述参考鸟哥私房菜


变量内容的删除、取代与替换

标签:linux   shell   变量   替换   取代   

原文地址:http://ljbaby.blog.51cto.com/10002758/1628012

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!