在 zsh 中列出别名、函数和变量的名称

Ole*_*nge 17 shell zsh

我需要一种方法来列出 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.
Run Code Online (Sandbox Code Playgroud)

背景

我需要这个来开发 env_parallel.zsh:https ://www.gnu.org/software/parallel/env_parallel.html

thr*_*rig 27

别名和函数包含在aliasesand 中functions,只需要打印这样的键即可。“变量和数组”比较棘手;parameters可能就足够了?

print -rl -- ${(k)aliases} ${(k)functions} ${(k)parameters}
Run Code Online (Sandbox Code Playgroud)

(假设启用完成builtins,您可能还需要, commands,以及从print -l ${(k)mashing列出的其他内容tab。)

  • 也许`${(kM)parameters:#[[:alpha:]_][[:alnum:]_]#}`(带有`extendedglob`)对于_only_作为变量的参数。 (2认同)
  • `对于 ${(koM)parameters:#[[:alpha:]][[:alnum:]_]#} 中的 k; 做; [[ ${(M)参数[$k]:#association*} ]] || 继续; 打印--“$k”;done`(需要设置`extendedglob`)应该为您提供一个简短的变量列表,具体取决于您要查找的数据。将 `[[:alpha:]]` 更改为 `[[:alpha:]_]` 将包含以下划线开头的关联数组(或变量)。将“association*”更改为“scalar*”或“array*”或“integer*”或“*export*”将为您提供这些类型的结果。“变量和数组”需要更多的工作。 (2认同)