是否有一种在bash中查看bash函数定义的方法?

例如,我定义了函数foobar

function foobar {
    echo "I'm foobar"
}

是否有任何方法可以稍后获得foobar运行的代码?

$ # non-working pseudocode
$ echo $foobar
echo "I'm foobar"

当前回答

set | grep -A999 '^foobar ()' | grep -m1 -B999 '^}'

foobar是函数名。

其他回答

可以使用declare在bash中显示函数的定义。例如:

declare -f foobar

使用类型。如果foobar在~/.profile中定义:

$ type foobar
foobar is a function
foobar {
    echo "I'm foobar"
}

这确实找出了foobar是什么,如果它被定义为一个函数,它就调用declare -f,如pmohandras所解释的那样。

要打印出函数体(即代码),请使用sed:

type foobar | sed '1,3d;$d'
set | grep -A999 '^foobar ()' | grep -m1 -B999 '^}'

foobar是函数名。

set | sed -n '/^foobar ()/,/^}/p'

这基本上打印了set命令中以函数名foobar()开始,以}结束的行。