Từ tài liệu tham khảo Bash :
FUNCNAME
Một biến mảng chứa tên của tất cả các hàm shell hiện có trong ngăn xếp lệnh thực thi. Phần tử có chỉ số 0 là tên của bất kỳ hàm shell nào đang thực thi. Phần tử dưới cùng nhất (phần tử có chỉ số cao nhất) là "chính". Biến này chỉ tồn tại khi một hàm shell đang thực thi. Việc gán cho FUNCNAME không có hiệu lực và trả về trạng thái lỗi. Nếu FUNCNAME không được đặt, nó sẽ mất các thuộc tính đặc biệt, ngay cả khi sau đó được đặt lại.
Biến này có thể được sử dụng với BASH_LINENO và BASH_SOURCE. Mỗi phần tử của FUNCNAME có các phần tử tương ứng trong BASH_LINENO và BASH_SOURCE để mô tả ngăn xếp cuộc gọi. Chẳng hạn, $ {FUNCNAME [$ i]} đã được gọi từ tệp $ {BASH_SOURCE [$ i + 1]} tại số dòng $ {BASH_LINENO [$ i]}. Trình dựng cuộc gọi hiển thị ngăn xếp cuộc gọi hiện tại bằng cách sử dụng thông tin này.
Khi các mảng bash được truy cập mà không có chỉ mục, phần tử đầu tiên của mảng sẽ được trả về, do đó $FUNCNAME
sẽ hoạt động trong các trường hợp đơn giản để cung cấp tên của hàm hiện tại ngay lập tức, nhưng nó cũng chứa tất cả các hàm khác trong ngăn xếp cuộc gọi. Ví dụ:
# 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
Sẽ xuất:
$ bash foobar
In function foo: FUNCNAME=foo foobar main
foobar
In function foobar: FUNCNAME=foobar main
FUNCNAME
mảng và các biến Bash khác: github.com/codeforester/base/blob/master/lib/stdlib.sh . Xem các chức nănglog_debug_enter
vàlog_debug_leave
đặc biệt.