Liste des noms d'alias, de fonctions et de variables dans zsh

11

J'ai besoin d'un moyen de lister les noms (sans le corps / contenu / valeur) des alias, fonctions, variables, tableaux dans zsh. De manière optimale, il devrait se comporter comme compgen:

compgen -a # will list all the aliases you could run.
compgen -A function # will list all the functions you could run.
compgen -A variable # will list all the variables defined.

Contexte

J'en ai besoin pour développer env_parallel.zsh: https://www.gnu.org/software/parallel/env_parallel.html

Ole Tange
la source

Réponses:

18

Les alias et les fonctions sont contenus dans aliaseset functions, et il suffit d'imprimer les clés de ceux-ci. "Variables et tableaux" est plus délicat; parameterspeut suffire?

print -rl -- ${(k)aliases} ${(k)functions} ${(k)parameters}

(Vous pouvez également avoir besoin de builtins, commandset peut-être d'autres éléments répertoriés à partir de print -l ${(k)puis écraser tab, en supposant que l'achèvement est activé.)

branler
la source
1
Peut-être ${(kM)parameters:#[[:alpha:]_][[:alnum:]_]#}(avec extendedglob) uniquement pour les paramètres qui sont des variables.
Stéphane Chazelas
for k in ${(koM)parameters:#[[:alpha:]][[:alnum:]_]#}; do; [[ ${(M)parameters[$k]:#association*} ]] || continue; print -- "$k"; done( extendedglobdoit être défini) devrait vous donner une courte liste de variables à utiliser en fonction des données que vous recherchez. Le passage [[:alpha:]]à [[:alpha:]_]inclura des tableaux associatifs (ou variables) qui commencent par un trait de soulignement. Le passage association*à scalar*ou array*ou integer*ou *export*vous donnera les résultats de ces types. Les "variables et tableaux" demandent un peu plus de travail.
Friartek