Если у меня есть скрипт Bash вроде:
#!/bin/bash
f() {
# echo function name, "f" in this case
}
Есть какой-либо способ сделать это? Это может быть использовано в справочных сообщениях, таких как
printf "Usage: %s: blah blah blah \n" $(basename $0) >&2;
Только в этом случае мне не нужно то $0
, что является именем файла скрипта.
FUNCNAME
массив и другие переменные Bash: github.com/codeforester/base/blob/master/lib/stdlib.sh . Смотрите функцииlog_debug_enter
иlog_debug_leave
в частности.Ответы:
Вы можете использовать
${FUNCNAME[0]}
в ,bash
чтобы получить имя функции.источник
Из справочного руководства Bash :
Когда доступ к массивам bash осуществляется без индекса, будет возвращен первый элемент массива, поэтому он
$FUNCNAME
будет работать в простых случаях для предоставления имени текущей функции, но он также содержит все другие функции в стеке вызовов. Например:Будет выводить:
источник
[0]
если это подразумевается при доступе к недекорированной переменной?Я использую,
${FUNCNAME[0]}
чтобы напечатать текущее имя функцииисточник
Другой пример:
Будет выводить:
источник
Самый простой способ получить имя функции (изнутри функции)
источник
###
в своих ответах.