`bashshell中的函数

`bashshell中的函数,bash,function,Bash,Function,在zshell中有一个方便的命令,返回所有可用函数的列表。该命令被方便地称为函数。我在Bash中找不到类似的替代方案。我创建了一个快速且肮脏(完全不可接受)的函数来大致完成相同的任务,但它至少有一个明显的问题:因为它依赖于解析文件,所以必须列出要查找的所有文件(可能会过时)或给出一个表达式(保证提供您不想查看的文件,例如.bash\u history) 这里是函数,因为我知道如果我不发布它,有人会要求它,但我很确定这是一条死胡同,或者至少是错误的方法 functions() { grep "

在zshell中有一个方便的命令,返回所有可用函数的列表。该命令被方便地称为
函数
。我在Bash中找不到类似的替代方案。我创建了一个快速且肮脏(完全不可接受)的函数来大致完成相同的任务,但它至少有一个明显的问题:因为它依赖于解析文件,所以必须列出要查找的所有文件(可能会过时)或给出一个表达式(保证提供您不想查看的文件,例如
.bash\u history

这里是函数,因为我知道如果我不发布它,有人会要求它,但我很确定这是一条死胡同,或者至少是错误的方法

functions() {
  grep "^function " "$HOME/."{bashrc,bash_profile,aliases,functions,projects,variables} | sort | sed -e 's/{//' | uniq
}
我可以通过解析.bash_概要文件并获取所有源文件的列表,然后解析它们以获取函数来改进这种错误的方法,但当您将以下复杂情况添加到混合中时,这真的不值得:

  • 您可以使用
    源文件
  • 我还碰巧使用了一个函数来生成文件,首先检查文件是否存在
  • 你可以很容易地在
    &&
    之后找到源代码:它不一定是一行中的第一件或唯一一件事
  • 您必须考虑这样一个事实,即函数前面不一定有关键字
    function
  • 可以省略函数名后的()
  • 可能还有其他我没有想到的复杂因素
  • 从根本上说,这是错误的,因为它是在解析文件,而不是报告内存中加载的内容
  • 有没有什么合理的方法可以在Bash中获取内存中加载的所有函数的列表?如果没有的话,这似乎是一个巨大的遗漏


    (对于那些寻找重复问题的人来说,这是非常不同的,因为它要求一种只列出来自特定文件的函数的方法。)在
    bash
    中使用
    typeset-f
    。在
    zsh
    中,
    函数
    只是同一个命令的同义词。

    typeset-f
    也给出了函数定义,这是我更愿意避免的。
    typeset-f
    列出了每个函数名,前面有
    declare-f
    函数s(){typeset-F | sed-e's/^declare-F/'}
    有效。