61 votes

Obtenir la liste des variables dont le nom correspond à un certain modèle.

Dans bash

echo ${!X*}

imprimera tous les noms des variables dont le nom commence par 'X'.
Est-il possible d'obtenir la même chose avec un motif arbitraire, par exemple, obtenir tous les noms des variables dont le nom contient un 'X' dans n'importe quelle position ?

81voto

Johannes Schaub - litb Points 256113

Utilisez la commande intégrée compgen :

compgen -A variable | grep X

17voto

diciu Points 18634

Cela devrait le faire :

env | grep ".*X.*"

Edit : désolé, cela cherche aussi X dans la valeur. Cette version ne recherche X que dans le nom de la variable.

env | awk -F "=" '{print $1}' | grep ".*X.*"

Comme Paul le souligne dans les commentaires, si vous cherchez également des variables locales, env doit être remplacé par set :

set | awk -F "=" '{print $1}' | grep ".*X.*"

6voto

alxp Points 3180

Le plus simple serait de faire un

printenv |grep D.*=

La seule différence est qu'il imprime également les valeurs de la variable.

5voto

Phi Points 140

En améliorant la réponse de Johannes Schaub - litb en supprimant fork/exec dans le bash moderne, nous pourrions faire ceci

compgen -A variable  -X '!*X*'

c'est-à-dire un X à n'importe quelle position dans la liste des variables.

3voto

anandi Points 11

Ceci recherchera X uniquement dans les noms de variables et ne produira que les noms de variables correspondants :

set | grep -oP '^\w*X\w*(?==)'

ou pour faciliter l'édition du modèle recherché

set | grep -oP '^\w*(?==)' | grep X

ou simplement (peut-être plus facile à retenir)

set | cut -d= -f1 | grep X

Si vous voulez faire correspondre X à l'intérieur des noms de variables, mais que la sortie se fait sous forme de nom=valeur, alors :

set | grep -P '^\w*X\w*(?==)'

et si vous voulez faire correspondre X à l'intérieur des noms de variables, mais sortir seulement la valeur, alors :

set | grep -P '^\w*X\w*(?==)' | grep -oP '(?<==).*'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X