%.* 和 %%.*
看一段代码:
[Bash shell] 纯文本查看 复制代码 #!/bin/bash
var="groad.net.txt"
echo ${var%.*}
运行输出:# sh tmp.sh
groad.net[/qutoe]
将上面的 ${var%.*} 改成 ${var%%.*} ,那么将会看到输出为:
[quote]# sh tmp.sh
groad %.* 和 %%.* 它们都是从右到左匹配,匹配完后去掉匹配部分。它们的输出之所以不同是因为前者是非贪婪性匹配,而后者是贪婪性匹配。对 %.* 来说,% 实行的是非贪婪匹配,这样就使得它只匹配到 .txt 为止;而 %% 的贪婪属性使得它匹配到 .net.txt 为止。从上面的测试中可以总结到,使用 %.* 是获取文件的文件名(去掉文件名后缀)的一种好方法。
#*. 和 ##*.
比较下面代码:
[Bash shell] 纯文本查看 复制代码 #!/bin/bash
var="groad.net.txt"
echo ${var##*.}
运行输出:如果将上面的 ##.* 改为 #.* 那么输出则变成:net.txt 。#.* 和 ##.* 的关系和 %.*和%%.* 的关系是类似道理,但它们是从左到右匹配,且当匹配完后去掉匹配部分;#.* 是非贪婪属性,而 ##.* 是贪婪属性。从上面的测试可以看出,##.* 的一个较有用作用是获得文件名的后缀名。
还可以参考:http://www.groad.net/bbs/read.php?tid-2330-fpage-3.html |