답변:
로부터 배쉬 참조 설명서 :
기능 명
현재 실행 호출 스택에있는 모든 쉘 함수의 이름을 포함하는 배열 변수입니다. 인덱스가 0 인 요소는 현재 실행중인 쉘 함수의 이름입니다. 맨 아래 요소 (인덱스가 가장 높은 요소)는 "main"입니다. 이 변수는 쉘 기능이 실행될 때만 존재합니다. FUNCNAME에 대한 지정은 적용되지 않으며 오류 상태를 리턴합니다. FUNCNAME을 설정하지 않으면 나중에 다시 설정하더라도 특수 속성이 손실됩니다.
이 변수는 BASH_LINENO 및 BASH_SOURCE와 함께 사용할 수 있습니다. FUNCNAME의 각 요소에는 호출 스택을 설명하기 위해 BASH_LINENO 및 BASH_SOURCE에 해당 요소가 있습니다. 예를 들어 $ {FUNCNAME [$ i]}은 (는) 행 번호 $ {BASH_LINENO [$ i]}의 $ {BASH_SOURCE [$ i + 1]} 파일에서 호출되었습니다. 발신자 기본 제공은이 정보를 사용하여 현재 호출 스택을 표시합니다.
인덱스없이 bash 배열에 액세스하면 배열의 첫 번째 요소가 반환되므로 $FUNCNAME
간단한 경우에는 즉시 현재 함수의 이름을 제공하지만 호출 스택의 다른 모든 함수도 포함합니다. 예를 들면 다음과 같습니다.
# in a file "foobar"
function foo {
echo foo
echo "In function $FUNCNAME: FUNCNAME=${FUNCNAME[*]}" >&2
}
function foobar {
echo "$(foo)bar"
echo "In function $FUNCNAME: FUNCNAME=${FUNCNAME[*]}" >&2
}
foobar
출력합니다 :
$ bash foobar
In function foo: FUNCNAME=foo foobar main
foobar
In function foobar: FUNCNAME=foobar main
[0]
장식되지 않은 변수에 액세스하여 묵시적을 추가하는 이유는 무엇 입니까?
${FUNCNAME[0]}
현재 기능 이름을 인쇄 하는 데 사용 합니다
함수 이름을 얻는 가장 간단한 방법 (함수 내부에서)
echo $0
###
답변에서 학대 를 중지 하십시오.
FUNCNAME
배열과 다른 배시 변수 : github.com/codeforester/base/blob/master/lib/stdlib.sh이 . 기능을 참조log_debug_enter
하고log_debug_leave
, 특히있다.