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

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

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

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


当前回答

假设bash shell:

typeset -f

将列出函数。

typeset -F

将只列出函数名。

其他回答

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

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

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

$ compgen -A function
function1
function2

假设bash shell:

typeset -f

将列出函数。

typeset -F

将只列出函数名。

声明- f

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

Bash参考手册

declare -F

会给你所有函数的名字

type function_name

会给你一个特定函数的源

Bash shell脚本特定的答案

(因为这个问题被标记为这个问题的重复)

如果你在你的shell中导出了函数,一个被调用的脚本将会看到它们。但幸运的是,他们被这样标记。

复制意大利面演示脚本

#!/bin/bash
foo(){ :;}; bar(){ :;}; baz(){ :;}; export -f foo bar

export -pf

bash -c $'spam(){ :;}; \
echo "RAW:"; \
declare -pF; \
echo "FILTERED:"; \
declare -pF | awk \'$2 !~ /x/{print$3}\''

Bash文本

/tmp $ foo(){ :;}; bar(){ :;}; baz(){ :;}; export -f foo bar

/tmp $ export -pf
bar ()
{
    :
}
declare -fx bar
foo ()
{
    :
}
declare -fx foo

/tmp $ bash -c $'spam(){ :;}; echo "RAW:"; declare -pF; echo "FILTERED:"; declare -pF | awk \'$2 !~ /x/{print$3}\''
RAW:
declare -fx bar
declare -fx foo
declare -f spam
FILTERED:
spam