曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4189|回复: 0
打印 上一主题 下一主题

%.* , %%.*, #*., ##*.

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2012-3-25 15:02:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
%.* 和 %%.*
看一段代码:
[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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-4-29 05:30 , Processed in 0.076862 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表