linux - template - script shell menu interactif




bash: obtenir la liste des variables dont le nom correspond à un certain modèle (4)

En bash

echo ${!X*}

affichera 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?


Cela devrait le faire:

env | grep ".*X.*"

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

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

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

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

Le plus facile pourrait être de faire un

printenv |grep D.*=

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


env | awk -F= '{if($1 ~ /X/) print $1}'

Cela ne recherchera X que dans les noms de variables et affichera uniquement les noms de variables correspondants:

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

ou pour faciliter l'édition du motif 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 en sortie sous forme name = value, alors:

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

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

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




scripting