З довідкового керівництва Bash :
FUNCNAME
Змінна масиву, що містить імена всіх функцій оболонки, що знаходяться в стеці виклику виконання. Елемент з індексом 0 - це назва будь-якої функції оболонки, яка виконується в даний час. Найнижчий елемент (той, що має найвищий показник) - "головний". Ця змінна існує лише тоді, коли виконується функція оболонки. Призначення FUNCNAME не мають ефекту і повертають статус помилки. Якщо FUNCNAME вимкнено, він втрачає свої особливі властивості, навіть якщо він згодом скидається.
Цю змінну можна використовувати з BASH_LINENO та BASH_SOURCE. Кожен елемент FUNCNAME має відповідні елементи в BASH_LINENO та BASH_SOURCE для опису стеку викликів. Наприклад, $ {FUNCNAME [$ i]} викликався з файлу $ {BASH_SOURCE [$ i + 1]} за номером рядка $ {BASH_LINENO [$ i]}. Вбудований абонент відображає поточний стек викликів, використовуючи цю інформацію.
При доступі до масивів 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
FUNCNAME
масив та інші змінні Bash: github.com/codeforester/base/blob/master/lib/stdlib.sh . Див. Функціїlog_debug_enter
таlog_debug_leave
зокрема.