Listen Sie die Namen der Aliase, Funktionen und Variablen in zsh auf

11

Ich brauche eine Möglichkeit, die Namen (ohne den Textkörper / Inhalt / Wert) von Aliasen, Funktionen, Variablen und Arrays in zsh aufzulisten. Optimal sollte es sich so verhalten 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.

Hintergrund

Ich benötige dies, um env_parallel.zsh zu entwickeln: https://www.gnu.org/software/parallel/env_parallel.html

Ole Tange
quelle

Antworten:

18

Aliase und Funktionen sind in aliasesund enthalten functions, und man muss nur die Schlüssel von solchen drucken. "Variablen und Arrays" ist schwieriger; parameterskann ausreichen?

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

(Sie können auch brauchen builtins, commandsund vielleicht andere Dinge , von der print -l ${(k)und Maischen dann tab, Abschluss unter der Annahme aktiviert ist .)

Thrig
quelle
1
Vielleicht ${(kM)parameters:#[[:alpha:]_][[:alnum:]_]#}(mit extendedglob) nur für die Parameter, die Variablen sind.
Stéphane Chazelas
for k in ${(koM)parameters:#[[:alpha:]][[:alnum:]_]#}; do; [[ ${(M)parameters[$k]:#association*} ]] || continue; print -- "$k"; done( extendedglobmuss festgelegt werden) sollte Ihnen eine kurze Liste von Variablen geben, die Sie verwenden können, je nachdem, nach welchen Daten Sie suchen. Das Ändern [[:alpha:]]in [[:alpha:]_]enthält assoziative Arrays (oder Variablen), die mit einem Unterstrich beginnen. Wenn Sie association*zu scalar*oder array*oder integer*oder wechseln *export*, erhalten Sie die Ergebnisse dieser Typen. "Variablen und Arrays" erfordern etwas mehr Arbeit.
Friartek