No 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]
o que mostra que libstdc++-12-dev
já está instalado. Procurando por isso com:
paul@box4x4:~$ apt search libstdc++-12-dev
Sorting... Done
Full Text Search... Done
falha. Por que é que?
Em vez disso, corra
apt search libstdc\\+\\+-12-dev
.man apt
diz:Não, isso não é um problema de
bash
expansão. Se estivesse expandindo,echo
ajudará você a depurar para onde está expandindo:O problema é que você escreveu
libstdc++-12-dev
. Isso, quando interpretado como RegEx, significa:libstd
literalmentec
literalmente-12-dev
literalmenteapt search 'libstdc\+\+-12-dev'
funciona tão bem quantoapt search libstdc\\+\\+-12-dev
. Para escapar das barras invertidasbash
, você precisa citá-las ou dobrá-las. Então, oapt
mecanismo RegEx precisa de uma barra invertida para interpretá-lo+
como uma string literal em vez de "um ou mais dos anteriores".