有没有办法在bash中查看bash函数定义?
例如,假设我定义了函数foobar
function foobar {
echo "I'm foobar"
}
以后是否有办法获取foobar
运行的代码?
$ # non-working pseudocode
$ echo $foobar
echo "I'm foobar"
答案 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()开头,以}
结尾