![为什么 apt 找不到已安装的软件包?](https://linux22.com/image/1199949/%E4%B8%BA%E4%BB%80%E4%B9%88%20apt%20%E6%89%BE%E4%B8%8D%E5%88%B0%E5%B7%B2%E5%AE%89%E8%A3%85%E7%9A%84%E8%BD%AF%E4%BB%B6%E5%8C%85%EF%BC%9F.png)
在 Ubuntu 22.04.3 上:
paul@box4x4:~$ apt search libstdc++ | grep installed
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
libstdc++-11-dev/jammy-updates,jammy-security,now 11.4.0-1ubuntu1~22.04 amd64 [installed,automatic]
libstdc++-12-dev/jammy-updates,jammy-security,now 12.3.0-1ubuntu1~22.04 amd64 [installed]
libstdc++6/jammy-updates,jammy-security,now 12.3.0-1ubuntu1~22.04 amd64 [installed,automatic]
这表明libstdc++-12-dev
已经安装。使用以下命令进行搜索:
paul@box4x4:~$ apt search libstdc++-12-dev
Sorting... Done
Full Text Search... Done
失败。这是为什么?
答案1
改为跑步apt search libstdc\\+\\+-12-dev
。
man apt
说:
search (apt-cache(8)) search can be used to search for the given regex(7) term(s)
不,这不是bash
扩展的问题。如果它正在进行扩展,echo
将帮助您调试它扩展的内容:
home@daniel-tablet1:~$ echo apt search libstdc++-12-dev
apt search libstdc++-12-dev
home@daniel-tablet1:~$ echo apt search 'libstdc++-12-dev'
apt search libstdc++-12-dev
问题是你写了libstdc++-12-dev
。当将其解释为 RegEx 时,其含义为:
- 字符串
libstd
字面上 - 实际上,任意数量的 c。从字面上讲,或更多前面的匹配项,即:
- 实际上,任意数量的 c。从字面上讲,或更多前面的匹配项,即:(嵌套两次是多余的)
- 字符串
c
字面上
- 字符串
- 实际上,任意数量的 c。从字面上讲,或更多前面的匹配项,即:(嵌套两次是多余的)
- 字符串
-12-dev
字面上
apt search 'libstdc\+\+-12-dev'
和 一样好用apt search libstdc\\+\\+-12-dev
。要转义 中的反斜杠bash
,您需要将其括起来或将其双击。然后,apt
RegEx 引擎需要一个反斜杠来告诉它将其解释+
为文字字符串,而不是“前面的一个或多个”。