bash는 함수의 정의를 보여줄 수 있습니까?


262

bash에서 bash 함수의 정의를 보는 방법이 있습니까?

예를 들어 함수를 정의했다고 가정 해보십시오. foobar

function foobar {
    echo "I'm foobar"
}

나중에 foobar실행 되는 코드를 얻는 방법 이 있습니까?

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

답변:


357

사용하십시오 type. 만약 foobar예를 들어, 당신에 정의되어 있습니다 ~/.profile:

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

이것은 무엇인지 알아 내고 그것이 foobar함수로 정의되면 declare -fpmohandras가 설명하는대로 호출합니다 .

함수 본문 (예 sed: 코드) 만 인쇄하려면 다음을 사용하십시오 .

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

2
@sjsupersumit이 질문은 Bash 솔루션을 명시 적으로 요구합니다.
bfontaine

210

선언을 사용하여 bash에서 함수 정의를 표시 할 수 있습니다. 예를 들면 다음과 같습니다.

declare -f foobar

1
지금까지는로드 된 다른 스크립트 파일에 함수가 정의 된 경우에도 작동합니다. zsh에서도 작동합니다.
Diego Nemo

2
비 리눅스 시스템에서 오래된 포탄 작품은 당신이 사용하는 경우typeset -f
엠마뉴엘

또한 그것은 단지 function정의를 보여주기 때문에 좋기 때문에 원하는 것을 파싱 할 필요가 없습니다.
ribamar

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

이것은 기본적으로 함수 이름 foobar ()로 시작하고}로 끝나는 set 명령의 행을 인쇄합니다.


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

foobar는 함수 이름입니다.


4
문제 : 첫 번째 "}"까지만 표시됩니다. 정의에 실제로 Bash에서 허용하는 "{...}"의 중첩이 포함될 때마다 모든 것이 아닙니다.
데스티니 건축가

1
함수에 중괄호 패턴이 포함 된 here-doc / here-string이 포함 된 경우에도 실패 할 수 있습니다.
Cheetah
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.