Lista de nombres de alias, funciones y variables en zsh

11

Necesito una forma de enumerar los nombres (sin el cuerpo / contenido / valor) de alias, funciones, variables, matrices en zsh. Óptimamente debería comportarse así 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.

Antecedentes

Necesito esto para desarrollar env_parallel.zsh: https://www.gnu.org/software/parallel/env_parallel.html

Ole Tange
fuente

Respuestas:

18

Los alias y funciones están contenidos en aliasesy functions, y uno simplemente necesita imprimir las claves de los mismos. "Variables y matrices" es más complicado; parameterspuede ser suficiente?

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

(También puede necesitar builtins, commandsy tal vez otras cosas enumeradas desde print -l ${(k)y luego macerar tab, suponiendo que la finalización esté habilitada).

thrig
fuente
1
Quizás ${(kM)parameters:#[[:alpha:]_][[:alnum:]_]#}(con extendedglob) solo para los parámetros que son variables.
Stéphane Chazelas
for k in ${(koM)parameters:#[[:alpha:]][[:alnum:]_]#}; do; [[ ${(M)parameters[$k]:#association*} ]] || continue; print -- "$k"; done( extendedglobdebe establecerse) debería proporcionarle una breve lista de variables para usar según los datos que esté buscando. El cambio [[:alpha:]]a [[:alpha:]_]incluirá matrices asociativas (o variables) que comienzan con un guión bajo. Cambiar association*a scalar*o array*o integer*o *export*le dará los resultados de esos tipos. Las "variables y matrices" requieren un poco más de trabajo.
Friartek