Перелічіть назви псевдонімів, функцій та змінних у zsh


11

Мені потрібен спосіб перелічити імена (без тіла / змісту / значення) псевдонімів, функцій, змінних, масивів у zsh. Оптимально він повинен вести себе так 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.

Фон

Мені це потрібно для розробки env_parallel.zsh: https://www.gnu.org/software/parallel/env_parallel.html

Відповіді:


18

Псевдоніми та функції містяться в aliasesі functions, і потрібно просто роздрукувати такі ключі. "Змінні та масиви" є складнішими; parametersможе вистачити?

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

(Можливо, вам знадобляться builtins, commandsі, можливо, інші речі, перераховані з, print -l ${(k)а потім перемішування tab, якщо припустити, що завершення включено.)


1
Можливо ${(kM)parameters:#[[:alpha:]_][[:alnum:]_]#}extendedglob) лише для параметрів, що є змінними.
Stéphane Chazelas

for k in ${(koM)parameters:#[[:alpha:]][[:alnum:]_]#}; do; [[ ${(M)parameters[$k]:#association*} ]] || continue; print -- "$k"; done( extendedglobмає бути встановлено) має містити короткий перелік змінних, які слід використовувати, залежно від того, які дані ви шукаєте. Зміна [[:alpha:]]на [[:alpha:]_]буде включати асоціативні масиви (або змінні), які починаються з підкреслення. Зміна association*до scalar*або array*або integer*або *export*дасть вам результати цих типів. "Змінні та масиви" займають трохи більше роботи.
Friartek
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.