Listar nomes de aliases, funções e variáveis ​​no zsh

11

Eu preciso de uma maneira de listar os nomes (sem o corpo / conteúdo / valor) de aliases, funções, variáveis ​​e matrizes no zsh. Idealmente, ele deve se comportar como 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.

fundo

Eu preciso disso para desenvolver env_parallel.zsh: https://www.gnu.org/software/parallel/env_parallel.html

Ole Tange
fonte

Respostas:

18

Aliases e funções estão contidos em aliasese functions, e é necessário apenas imprimir as chaves de tal. "Variáveis ​​e matrizes" é mais complicado; parameterspode ser suficiente?

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

(Você também pode precisar builtins, commandse talvez outras coisas listadas print -l ${(k)e depois esmagadas tab, desde que a conclusão esteja ativada.)

agitar
fonte
1
Talvez ${(kM)parameters:#[[:alpha:]_][[:alnum:]_]#}(com extendedglob) apenas para os parâmetros que são variáveis.
Stéphane Chazelas
for k in ${(koM)parameters:#[[:alpha:]][[:alnum:]_]#}; do; [[ ${(M)parameters[$k]:#association*} ]] || continue; print -- "$k"; done( extendedglobprecisa ser definido) deve fornecer uma lista curta de variáveis ​​a serem usadas, dependendo dos dados que você está procurando. Alterar [[:alpha:]]para [[:alpha:]_]incluirá matrizes associativas (ou variáveis) que começam com um sublinhado. Alterar association*para scalar*ou array*ou integer*ou *export*fornecerá os resultados desses tipos. "Variáveis ​​e matrizes" exigem um pouco mais de trabalho.
Friartek