Wyświetla nazwy aliasów, funkcji i zmiennych w zsh

11

Potrzebuję sposobu, aby wyświetlić listę nazw (bez treści / treści / wartości) aliasów, funkcji, zmiennych, tablic w Zsh. Optymalnie powinien zachowywać się jak 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.

tło

Potrzebuję tego, aby rozwinąć env_parallel.zsh: https://www.gnu.org/software/parallel/env_parallel.html

Ole Tange
źródło

Odpowiedzi:

18

Aliasy i funkcje są zawarte w aliasesi functions, i wystarczy wydrukować klucze takich. „Zmienne i tablice” są trudniejsze; parametersmoże wystarczyć?

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

(Być może trzeba builtins, commandsi być może inne rzeczy wymienione z print -l ${(k)czym zacierania tab, zakładając, że zakończenie jest włączona).

gałązka
źródło
1
Może ${(kM)parameters:#[[:alpha:]_][[:alnum:]_]#}(z extendedglob) tylko dla parametrów, które są zmiennymi.
Stéphane Chazelas
for k in ${(koM)parameters:#[[:alpha:]][[:alnum:]_]#}; do; [[ ${(M)parameters[$k]:#association*} ]] || continue; print -- "$k"; done( extendedglobnależy ustawić) powinien dać ci krótką listę zmiennych do użycia w zależności od tego, jakich danych szukasz. Zmiana [[:alpha:]]na [[:alpha:]_]będzie obejmować tablice asocjacyjne (lub zmienne), które zaczynają się od znaku podkreślenia. Zmiana association*na scalar*lub array*lub integer*lub *export*da wyniki tego typu. „Zmienne i tablice” wymagają nieco więcej pracy.
Friartek