2011-08-02 53 views
181

有沒有辦法在bash中查看bash函數的定義?bash可以顯示一個函數的定義嗎?

例如,假設我定義的函數foobar

function foobar { 
    echo "I'm foobar" 
} 

有什麼辦法後得到的代碼是foobar運行?

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

回答

240

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

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

這並找出foobar是,如果它被定義爲一個功能,它通過pmohandras解釋稱declare -f

+1

這在zsh中不起作用。 declare -f func幾乎無處不在 – sjsupersumit

127

您可以使用declare在bash中顯示函數的定義。例如:

declare -f foobar 
+0

大,給點意見,工作即使在其他加載腳本文件定義的功能。也在zsh中工作。 –

+1

在zsh中運行。所選答案對我不起作用。 – Bijan

+1

如果您使用'typeset -f' – Emmanuel

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

其中foobar是函數名稱。

+4

問題:只會顯示到第一個「}」,當定義包含確實Bash確實允許的「{...}」嵌套時,這不是所有的。 –

+1

如果函數包含一個包含花括號模式的here-doc/here-string,也可能失敗 – Cheetah

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

這基本上打印從您所設定的命令和函數的名稱foobar的(開始),並結束該行}

相關問題