实战演练
借助%操作符可以轻松将名称部分从"名称.扩展名"这种格式中提取出来。你可以按照下面的方法从sample.jpg中提取名称。
[root@shaofeng ~]# file_jpg="sample.jpg"
[root@shaofeng ~]# name=${file_jpg%.*}
[root@shaofeng ~]# echo $name
sample
借助#操作符实现,将文件名的扩展名部分提取出来。
[root@shaofeng ~]# extension=${file_jpg#*.}
[root@shaofeng ~]# echo $extension
jpg
工作原理
- 从$VAR中删除位于%右侧的通配符(在前例中是.*)所匹配的字符串。通配符从右向左进行匹配。
- 给VAR赋值,VAR=sample.jpg。那么,通配符从右向左就会匹配到.jpg,因此,从$VAR中删除匹配结果,就会得倒输出sample。
%属于贪婪(non-greedy)操作。它从右到左找出匹配通配符的最短结果,然后删除匹配的字符串。还有另一个操作符%%。这个操作符与%相似,但行为模式却是贪婪的,这意味着它会匹配符合条件的最长的字符串。
- %
[root@shaofeng ~]# VAR="a.b.c.jpg"
[root@shaofeng ~]# echo ${VAR%.*}
a.b.c
- %%
[root@shaofeng ~]# echo ${VAR%%.*}
a
从$VAR中删除位于#右侧的通配符(即在前例中使用的*.)所匹配的字符串。通配符从左向右进行匹配。
- #
[root@shaofeng ~]# echo ${VAR#*.}
b.c.jpg
- ##
[root@shaofeng ~]# echo ${VAR##*.}
jpg
提取域名例子
[root@shaofeng ~]# site="www.baidu.com"
[root@shaofeng ~]# echo ${site%.*}
www.baidu
[root@shaofeng ~]# echo ${site%%.*}
www
[root@shaofeng ~]# echo ${site#*.}
baidu.com
[root@shaofeng ~]# echo ${site##*.}
com