CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

再问

楼主password636(亮)2006-03-07 12:39:15 在 Linux/Unix社区 / 程序开发区 提问

关于第三个参数flags当为FNM_NOESCAPE,man   page里:  
    FNM_NOESCAPE  
                              If   this   flag   is   set,   treat   backslash   as   an   ordinary   character,   instead   of   an   escape   character.  
   
  查到资料:  
  If   FNM_NOESCAPE   is   not   set   in   flags,   a   backslash   character   (   '\'   )   in   pattern   followed   by   any   other   character   shall   match   that   second   character   in   string.   In   particular,   "\\"   shall   match   a   backslash   in   string.   If   FNM_NOESCAPE   is   set,   a   backslash   character   shall   be   treated   as   an   ordinary   character.  
   
  若pattern是'a\q'  
  string是'aq'  
   
  我理解是如果未设置FNM_NOESCAPE,则二者是匹配的,如果设置了就不匹配。结果是不论是否设置都匹配,那到底参数FNM_NOESCAPE是怎么使用?能不能举个例子  
  问题点数:10、回复次数:5Top

1 楼fierygnu(va_list)回复于 2006-03-07 23:07:04 得分 10

Shell里"\"字符是ESCAPE字符,用来解除Shell里的特殊字符的含义,如*.?"'等等,结果是"\"自身也成了特殊字符,所以如果需要正常的"\",需要写\\。这个选项就是设置"\"是否是转义字符的。如果设置了,则"\\"就是两个"\"了,在某些情况下可读性好。Top

2 楼password636(亮)回复于 2006-03-08 13:44:58 得分 0

那么下面的两个程序片断:  
  const   char   *pattern   =   "a\\n";  
  const   char   *string   =   "a\n";  
  int   result   =   fnmatch(pattern,string,0);//result   ==   1  
  //没有设置FNM_NOESCAPE,是不是应该匹配?为什么是1?0换成FNM_NOESCAPE,result还是1。  
   
   
  const   char   *pattern   =   "a\\d";  
  const   char   *string   =   "a\d";  
  int   result   =   fnmatch(pattern,string,0);//result   ==   0  
  //但是有warning:   unknown   escape   sequence   '\d',与是否是转义序列有什么关系?  
  //0换成FNM_NOESCAPE,result是1。  
   
  要是不出现warning,是不是必须使用转义序列,但是转义序列为什么result   都是1?  
   
   
   
   
   
  Top

3 楼fierygnu(va_list)回复于 2006-03-08 14:15:41 得分 0

不是fnmatch的问题,是C语言转义序列(不是shell转义序列)的问题。实际上传送到fnmatch的字符串不是原来的串了。a\\n变成了a\n,a\n则是a加一个换行,当然怎么也不会匹配了。  
  而a\\d和a\d被当作了a\d和ad(这就是warning的来源),所以结果是0和1。Top

4 楼password636(亮)回复于 2006-03-09 17:48:27 得分 0

那一般用FNM_NOESCAPE参数的时候应该如何使用fnmatch,还有就是如何应对转义序列,就是C语言转义序列和shell转义序列和FNM_NOESCAPE的使用Top

5 楼fierygnu(va_list)回复于 2006-03-09 17:52:42 得分 0

?C转义序列是肯定要考虑的,FNM_NOESCAPE只控制是否考虑shell转义序列。Top

相关问题

  • 一问再问
  • 再问
  • 再问!
  • 再问!!
  • 再问:
  • 再问?
  • 再问!
  • 再问debug问题!
  • 再问debug问题
  • locate问题再问!

关键词

  • 字符
  • shell
  • noescape
  • fnm
  • 转义序列
  • fnmatch
  • backslash
  • 匹配
  • 设置
  • 参数

得分解答快速导航

  • 帖主:password636
  • fierygnu

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo