Voici quelque chose de similaire à la réponse @GinkgoFr, mais sans les problèmes identifiés par @Tino ou @DejayClayton, et est plus robuste que le set -o posix
peu intelligent de @ DouglasLeeder :
+ function SOLUTION() { (set +o posix; set) | sed -ne '/^\w\+=/!q; p;'; }
La différence est que cette solution S'ARRÊTE après le premier rapport non variable, par exemple la première fonction rapportée par set
BTW: Le problème "Tino" est résolu. Même si POSIX est désactivé et que les fonctions sont signalées par set
, la sed ...
partie de la solution autorise uniquement les rapports de variables via (par exemple, des VAR=VALUE
lignes). En particulier, le A2
ne le fait pas indûment dans la sortie.
+ function a() { echo $'\nA2=B'; }; A0=000; A9=999;
+ SOLUTION | grep '^A[0-9]='
A0=000
A9=999
ET: Le problème "DejayClayton" est résolu (les retours à la ligne intégrés dans les valeurs des variables ne perturbent pas la sortie - chacun VAR=VALUE
obtient une seule ligne de sortie):
+ A1=$'111\nA2=222'; A0=000; A9=999;
+ SOLUTION | grep '^A[0-9]='
A0=000
A1=$'111\nA2=222'
A9=999
NOTE: La solution fournie par @DouglasLeeder souffre du problème "DejayClayton" (valeurs avec retours à la ligne incorporés). Ci-dessous, le A1
est faux et A2
ne devrait pas du tout apparaître.
$ A1=$'111\nA2=222'; A0=000; A9=999; (set -o posix; set) | grep '^A[0-9]='
A0=000
A1='111
A2=222'
A9=999
ENFIN: je ne pense pas que la version des bash
choses compte, mais ça pourrait. J'ai fait mes tests / développement sur celui-ci:
$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-msys)
POST-SCRIPT: Compte tenu de certaines des autres réponses à l'OP, je suis sûr à <100% que cela convertit set
toujours les nouvelles lignes dans la valeur en \n
, sur laquelle cette solution s'appuie pour éviter le problème "DejayClayton". C'est peut-être un comportement moderne? Ou une variation au moment de la compilation? Ou un paramètre set -o
ou une shopt
option? Si vous connaissez de telles variations, veuillez ajouter un commentaire ...
-o posix
now a diff ne contiendra que les variables.