为什么 apt 找不到已安装的软件包?

为什么 apt 找不到已安装的软件包?

在 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字面上
  • 字符串-12-dev字面上

apt search 'libstdc\+\+-12-dev'和 一样好用apt search libstdc\\+\\+-12-dev。要转义 中的反斜杠bash,您需要将其括起来或将其双击。然后,aptRegEx 引擎需要一个反斜杠来告诉它将其解释+为文字字符串,而不是“前面的一个或多个”。

相关内容