125 votes

Comment lister les variables déclarées en script dans bash ?

Dans mon script en bash, il y a beaucoup de variables, et je dois faire quelque chose pour les enregistrer dans un fichier. Ma question est de savoir comment lister toutes les variables déclarées dans mon script et obtenir une liste comme ceci :

VARIABLE1=abc
VARIABLE2=def
VARIABLE3=ghi

189voto

Douglas Leeder Points 29986

set produira les variables, malheureusement il produira aussi les fonctions définies.

Heureusement, le mode POSIX ne produit que les variables suivantes :

( set -o posix ; set ) | less

Piping vers less, ou rediriger vers l'endroit où vous voulez les options.

Donc, pour que les variables soient déclarées dans le script :

( set -o posix ; set ) >/tmp/variables.before
source script
( set -o posix ; set ) >/tmp/variables.after
diff /tmp/variables.before /tmp/variables.after
rm /tmp/variables.before /tmp/variables.after

(Ou au moins quelque chose basé sur cela :-) )

51voto

Juven Xu Points 91
compgen -v

Il répertorie toutes les variables, y compris les variables locales. Je l'ai appris à partir de la liste Get des variables dont le nom correspond à un certain modèle, et je l'ai utilisé dans mon script.

6voto

Cesar Roque Points 51

D'après certaines des réponses ci-dessus, cela a fonctionné pour moi :

before=$(set -o posix; set | sort);

fichier source :

comm -13 <(printf %s "$before") <(set -o posix; set | sort | uniq) 

5voto

ezpz Points 5273

Si vous pouvez post-traiter, (comme déjà mentionné) vous pourriez simplement placer un appel set au début et à la fin de votre script (chacun vers un fichier différent) et faire une différence sur les deux fichiers. Réalisez que cela contiendra encore un peu de bruit.

Vous pouvez également le faire de manière programmatique. Pour limiter la sortie à votre portée actuelle, vous devrez implémenter un wrapper à la création de variables. Par exemple :

store() {
    export ${1}="${*:2}"
    [[ ${STORED} =~ "(^| )${1}($| )" ]] || STORED="${STORED} ${1}"
}

store VAR1 abc
store VAR2 bcd
store VAR3 cde

for i in ${STORED}; do
    echo "${i}=${!i}"
done

Qui donne

VAR1=abc
VAR2=bcd
VAR3=cde

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