在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

Answers:


18

别名和功能包含在aliases和中functions,并且只需要打印此类的键即可。“变量和数组”比较棘手;parameters可以满足吗?

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

(假设启用了完成功能,您可能还需要builtinscommandsprint -l ${(k),然后列出其他内容,然后进行mashing tab。)


1
也许${(kM)parameters:#[[:alpha:]_][[:alnum:]_]#}(带有extendedglob用于作为变量的参数。
斯特凡Chazelas

for k in ${(koM)parameters:#[[:alpha:]][[:alnum:]_]#}; do; [[ ${(M)parameters[$k]:#association*} ]] || continue; print -- "$k"; doneextendedglob需要设置),这会根据您要查找的数据为您提供一个简短的变量列表。更改[[:alpha:]][[:alpha:]_]将包括以下划线开头的关联数组(或变量)。更改association*scalar*or array*integer*or *export*将为您提供这些类型的结果。“变量和数组”需要更多的工作。
Friartek
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.