实战演练

借助%操作符可以轻松将名称部分从"名称.扩展名"这种格式中提取出来。你可以按照下面的方法从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

results matching ""

    No results matching ""