【发布时间】:2013-02-18 07:50:06
【问题描述】:
我有一个文件名
文件
我正在运行这个命令
ls *.txt
理想情况下它应该匹配 .带有 'a' 和 * 的字符为零,但它返回的文件类似于
a.txt, b.txt
为什么这里 ls 正在治疗 .作为文字点,比正则表达式的任何字符都评分。
【问题讨论】:
我有一个文件名
文件
我正在运行这个命令
ls *.txt
理想情况下它应该匹配 .带有 'a' 和 * 的字符为零,但它返回的文件类似于
a.txt, b.txt
为什么这里 ls 正在治疗 .作为文字点,比正则表达式的任何字符都评分。
【问题讨论】:
它叫file globbing,而不是regular expression。
虽然两者都支持“?”、“*”等通配符,但它们有不同的方案。
例如,glob 中的 "a*" 匹配任何以 "a" 开头的 filename,但在正则表达式中,它匹配任何包含 0 个或多个字母的 string “一个”。另一个区别是通配符“?”并且正则表达式中的“*”必须有一个前面的元素,而在通配符中是不必要的。
至于你的最后一个问题,一个点“。”在 globbing 中没有特殊含义,它始终是字面上的点。要准确匹配通配符中的一个未知字符,可以使用“?”。
【讨论】:
它不是正则表达式,它是wildcard,其中* 表示任何字符,在.txt 之前,这就是为什么你会得到所有扩展名为.txt 的文件
Files and directories - WildCard
在 CP/M、DOS、Microsoft Windows 中指定文件名(或路径)时 和类 Unix 操作系统,星号字符 ("*") 替代零个或多个字符。在类 Unix 操作中 系统中,问号(“?”)只替换一个字符
【讨论】: