Salut,
Exact, j'ai confondu les noms de variable. C'est bien $paquet que j'aurais du mettre. Je corrige mon message. Et mea culpa, j'ai royalement ignoré la ligne commentée. Désolé.
Ma proposition est très permissive (plus que la tienne) :
grep -E "^.i.*${paquet}.*"
retournera quelque chose si la chaîne contenue dans $paquet se trouve n'importe où dans une ligne retournée par dpkg.
Ton grep ne retournera quelque chose que si la chaîne contenue dans la variable paquet se trouve à N (N > ou = à 0) espaces du deuxième caractère de la ligne qui doit être un i.
Si le nom du paquet n'est que vaguement connu, ma proposition marchera mieux. Exemple avec le paquet adobe-flashplugin dans le cas où on se souvient seulement qu'il se nomme flash-quelquechose :
$ dpkg-query -l | grep -E "^.i.*flash"
ii adobe-flashplugin 1:20201013.1-0ubuntu0.20.04.1 amd64 Adobe Flash Player plugin
vs
$ dpkg-query -l | grep -E "^.i *flash"
Pour ce qui est des accolades, tu peux toujours entourer le nom d'une variable par des accolades et tu DOIS le faire s'il y a un risque de confusion ou si tu veux manipuler la chaîne. Par exemple,
$ var="version"
$ echo "$var"
version
$ echo "$var1"
$ echo "${var}1"
version1
$ echo "$var-1"
version-1
Ici, var1 est compris comme la variable nommée var1 car tu peux définir une variable avec un tel nom. Or cette variable n'a jamais été définie. En écrivant ${var}1, on indique au shell que l'on veut la chaîne dans la variable var à laquelle on concatène le caractère 1. var-1 n'étant pas un nom de variable autorisé, il n'y a pas d’ambiguïté possible.
Je préfère mettre toujours les accolades. Certains hérétiques 😉 du forum ne seront pas d'accord avec moi.
Quant à la remarque de nany, au-delà de la blague que je n'avais pas notée 😃, elle voulait te faire remarquer que tu peux grepper directement le fichier sans faire un cat d'abord.