我可以输入alias来显示所有别名的列表。

但是对于函数,我所能做的就是grep .bash_profile。

它只获取该文件中的那些,而不是在子文件或动态定义的那些。

是否有更方便的方法来查找当前定义的函数?


当前回答

排版已过时,请使用:

declare -f

or

declare -f function_name

or

type function_name

其他回答

declare -F

会给你所有函数的名字

type function_name

会给你一个特定函数的源

排版已过时,请使用:

declare -f

or

declare -f function_name

or

type function_name

declare -F实际上打印声明命令,而不仅仅是函数名:

$ declare -F
declare -f function1
declare -f function2

你可以使用compgen -A函数只打印函数名:

$ compgen -A function
function1
function2

声明- f

的-f选项中可以列出函数名和定义 声明内置命令(参见Bash内置命令)。要声明的-F选项 只列出函数名吗 (还可以选择源文件和行号)。

Bash参考手册

我不是这方面的专家,仍在学习,但在找到这个问题及其答案后,因为我想要同样的答案,我写了以下内容(基于“原型保罗的声明”答案),最终给了我我想要的:一个别名和函数的格式化列表:

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的答案之前,所以从那推断,我用适当的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在某些情况下不起作用)。