Answers:
shopt -s extdebug
)并为declare -F
命令提供一个或多个函数名。即使启用了extdebug,IOW declare -F
也不会提供文件名/行号,这从文档中看不出来,也不是特别直观的IMO。
假设bash shell:
typeset -f
将列出功能。
typeset -F
将仅列出函数名称。
Obsolete. See `help declare'.
declare -F
实际上打印声明命令,而不仅仅是函数名:
$ declare -F
declare -f function1
declare -f function2
您可以使用compgen -A function
只打印功能名称:
$ compgen -A function
function1
function2
compgen -a -A function
compgen -A function | grep "^[a-z]\+" | grep -vE "^dequote|^quote|^in_array"
set | grep " ()"
您也可以使用fgrep代替grep或hgrep (hgrep是我个人最喜欢的,它是grep,但可以显示“ grep-ped”结果。
hgrep可以在这里找到: ACME Labs hgrep
set | grep " () $" | cut -d' ' -f1
。但是,与其他答案相比,它过于复杂。
grep
并不是一个好的解决方案,匹配函数定义的字符串将导致误报。@wjandrea仍然可以被多行字符串捕获,正则表达式也可以被捕获。
我不是这个专家,仍然在学习,但是在找到了这个问题及其答案之后,因为我想要同样的答案,我写了以下内容(基于“ 原型保罗的声明 ”答案),最终给了我我所追求的:别名和函数的格式列表:
function functionaliaslist() {
echo
echo -e "\033[1;4;32m""Functions:""\033[0;34m"
declare -F | awk {'print $3'}
echo
echo -e "\033[1;4;32m""Aliases:""\033[0;34m"
alias | awk {'print $2'} | awk -F= {'print $1'}
echo
echo -e "\033[0m"
}
那是在我看到Lri的答案之前,因此从中推断出来,我改为使用适当的命令替换declare
and alias
行compgen
,以获得:
function functionaliaslist() {
echo
echo -e "\033[1;4;32m""Functions:""\033[0;34m"
compgen -A function
echo
echo -e "\033[1;4;32m""Aliases:""\033[0;34m"
compgen -A alias
echo
echo -e "\033[0m"
}
为我想要的东西请客。分享以防万一。
还有许多其他“动作”可供compgen -A [action]
选择compgen
(当然还有其他选择)。我在这里找到了不错的文章,其中也包含指向手册页的链接(因为man compgen
在某些情况下不起作用)。