曲径通幽论坛

标题: %.* , %%.*, #*., ##*. [打印本页]

作者: beyes    时间: 2012-3-25 15:02
标题: %.* , %%.*, #*., ##*.
%.* 和 %%.*
看一段代码:
[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##*.}

运行输出:
# sh tmp.sh
txt
如果将上面的 ##.* 改为 #.* 那么输出则变成:net.txt 。#.*##.* 的关系和 %.*%%.* 的关系是类似道理,但它们是从左到右匹配,且当匹配完后去掉匹配部分;#.* 是非贪婪属性,而 ##.* 是贪婪属性。从上面的测试可以看出,##.* 的一个较有用作用是获得文件名的后缀名。

还可以参考:http://www.groad.net/bbs/read.php?tid-2330-fpage-3.html




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2