Jeśli mam skrypt Bash taki jak:
#!/bin/bash
f() {
# echo function name, "f" in this case
}
Czy jest na to sposób? Można to wykorzystać w wiadomościach pomocy, takich jak
printf "Usage: %s: blah blah blah \n" $(basename $0) >&2;
Tylko w tym przypadku nie chciałem $0
, czyli nazwa pliku skryptu.
FUNCNAME
tablicę i inne zmienne Bash: github.com/codeforester/base/blob/master/lib/stdlib.sh . Zobacz funkcjelog_debug_enter
ilog_debug_leave
w szczególności.Odpowiedzi:
Możesz użyć
${FUNCNAME[0]}
in,bash
aby uzyskać nazwę funkcji.źródło
Z podręcznika Bash :
Kiedy dostęp do tablic bash jest wykonywany bez indeksu, zostanie zwrócony pierwszy element tablicy, więc
$FUNCNAME
w prostych przypadkach będzie działać, aby podać nazwę natychmiast bieżącej funkcji, ale zawiera ona również wszystkie inne funkcje na stosie wywołań. Na przykład:Wyświetli:
źródło
[0]
jeśli jest to dorozumiane, uzyskując dostęp do niezdekorowanej zmiennej?Używam
${FUNCNAME[0]}
do wypisania aktualnej nazwy funkcjiźródło
Inny przykład:
Wyświetli:
źródło
Najprostszy sposób na uzyskanie nazwy funkcji (z wnętrza funkcji)
źródło
###
swoich odpowiedzi.