Может ли bash показать определение функции?

Есть ли способ просмотра определения функции bash в bash?

Например, скажем, я определил функцию foobar

function foobar {
    echo "I'm foobar"
}

Есть ли способ позже получить код, который foobar работает?

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

Ответ 1

Используйте 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'

Ответ 2

Вы можете отобразить определение функции в bash с помощью объявления. Например:

declare -f foobar

Ответ 3

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

где foobar является именем функции.

Ответ 4

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

Это в основном печатает строки из вашей команды набора, начиная с имени функции foobar() и заканчивая на}