Мне нужен способ перечислить имена (без тела / содержимого / значения) псевдонимов, функций, переменных, массивов в 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
${(kM)parameters:#[[:alpha:]_][[:alnum:]_]#}
(сextendedglob
) только для параметров, которые являются переменными.for k in ${(koM)parameters:#[[:alpha:]][[:alnum:]_]#}; do; [[ ${(M)parameters[$k]:#association*} ]] || continue; print -- "$k"; done
(extendedglob
должен быть установлен) должен дать вам краткий список переменных для использования в зависимости от того, какие данные вы ищете. Изменение[[:alpha:]]
к[[:alpha:]_]
будет включать в себя ассоциативные массивы (или переменные) , которые начинаются с символа подчеркивания. Изменениеassociation*
наscalar*
илиarray*
илиinteger*
или*export*
даст вам результаты этих типов. «Переменные и массивы» требуют немного больше работы.