jim*_*mij 18
不同之处在于 in bash
(当您标记问题时)*
匹配长度为 0 个或多个字符的任何字符串,而?*
匹配至少为 1 个字符的字符串。考虑例如两个文件:file.txt
andxfile.txt
并尝试使用ls ?*file.txt
or列出它们ls *file.txt
。
当我使用这种构造时,一种真实的情况是列出隐藏文件。很多时候我只是这样做
ls .??*
Run Code Online (Sandbox Code Playgroud)
双问号是为了防止列出当前目录.
和父目录..
,就像使用更简单的形式一样ls .*
。
我需要在这里指出,我.??*
的并不完美;例如只有两个字符的文件名,比如.f
,不匹配这个模式。更可靠的解决方案是ls {..?,.[!.]}*
,但通常这对我来说太多了。
你从哪里得到这个定义的,你指的是哪种表达?
如果我们谈论 shell 表达式,两个字符都可以单独使用,但是 for 的定义?
不匹配,因为它总是匹配一个字符而不是一个或零。
如果我们谈论正则表达式,两者都是放在表达式之后的运算符。所以在“?*”中必须放在其他东西之后。