bash能显示函数的定义吗?

时间:2011-08-02 18:35:08

标签: bash function

有没有办法在bash中查看bash函数定义?

例如,假设我定义了函数foobar

function foobar {
    echo "I'm foobar"
}

以后是否有办法获取foobar运行的代码?

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

4 个答案:

答案 0 :(得分:306)

使用type。如果是foobar,例如在~/.profile中定义:

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

这确实找出foobar是什么,如果它被定义为函数,它会调用declare -f,如pmohandras所解释。

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

type foobar | sed '1,3d;$d'

答案 1 :(得分:173)

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

declare -f foobar

答案 2 :(得分:6)

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

foobar是函数名。

答案 3 :(得分:4)

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

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

结尾