*
大致是一个长度无限的通配符。?
大致是一个或零长度的通配符。
在 中搜索字符串时使用*
vs之间有区别吗??*
bash
答案1
区别在于,in bash
(如您标记问题一样)*
匹配长度为零或多个字符的任何字符串,而?*
匹配长度至少为 1 个字符的字符串。例如,考虑两个文件:file.txt
和xfile.txt
并尝试用ls ?*file.txt
或列出它们ls *file.txt
。
当我使用这种构造时,一个真实的案例是列出隐藏文件。很多时候我只是这样做
ls .??*
这里使用双问号是为了防止列出当前目录.
和父目录..
,就像更简单的形式一样ls .*
。
我需要在这里指出我的.??*
并不完美;例如,只有两个字符的文件名(如.f
)与此模式不匹配。更可靠的解决方案是ls {..?,.[!.]}*
,但通常这对我来说打字太多了。
答案2
你从哪里得到这个定义,你指的是哪种表达方式?
如果我们谈论 shell 表达式,这两个字符都可以单独使用,但是 for 的定义?
不匹配,因为它总是匹配一个字符,而不是 1 或 0。
如果我们谈论正则表达式,两者都是放置在表达式之后的运算符。因此“?*”中必须放在其他内容之后。