apt-cache 允许使用哪种模式匹配来指定包名称?

apt-cache 允许使用哪种模式匹配来指定包名称?

问题是关于apt-cache之外的命令search regex

例如,我知道我可以使用星号字符作为通配符apt-cache policy 'firefox*',但我找不到任何有关其他可能的文档。它与文件名扩展相同吗?extglob是否存在类似 switch 的东西?

我试图解决的实际问题是向apt-cache policy我展示'firefox*'除所有-l10n-软件包之外的所有内容。

答案1

包名称按照文档中的描述进行处理为了apt-get install(是的,这并不明显):

如果没有包与给定表达式匹配,并且该表达式包含“.”、“?”之一或 '*' 则假定它是 POSIX 正则表达式,并且它应用于数据库中的所有包名称。然后安装(或删除)任何匹配项。请注意,匹配是通过子字符串完成的,因此“lo.*”匹配“how-lo”和“lowest”。如果不希望出现这种情况,请使用“^”或“$”字符锚定正则表达式,或者创建更具体的正则表达式。

严格来说,此检查是在对可用包名称执行 glob 之后进行的 - 因此首先检查包规范是否完全匹配,然后检查 glob 匹配(使用?*),如果没有找到任何内容,则检查包规范包含.?、 或*,解释为正则表达式。 (您可以通过运行 来查看通配行为apt-cache policy 'firefo?',它仅使用通配符进行匹配,然后apt-cache policy 'firefox?'运行 ​​,最终使用正则表达式。)

apt-cache policy 'firefox*'使用 glob 进行匹配。如果你想使用正则表达式强制它匹配,你可以使用类似的东西apt-cache policy 'firefox.*';检查mozilla-firefox输出中的 for 以查看表达式是否作为 glob 或正则表达式匹配。

apt-cache search被明确记录为处理正则表达式,因为它的参数是总是被视为正则表达式。

鉴于正则表达式支持的类型apt,排除-l10n-可能是不可能的;看这个答案了解详情。

相关内容