Bash może wydrukować nazwę bieżącej funkcji:
$ bash -c 'g(){ echo $FUNCNAME; }; g'
g
Dash nie może jednak użyć FUNCNAME :
$ dash -c 'g(){ echo $FUNCNAME; }; g'
Czy można uzyskać dostęp do bieżącej nazwy funkcji za pomocą Dash?
Bash może wydrukować nazwę bieżącej funkcji:
$ bash -c 'g(){ echo $FUNCNAME; }; g'
g
Dash nie może jednak użyć FUNCNAME :
$ dash -c 'g(){ echo $FUNCNAME; }; g'
Czy można uzyskać dostęp do bieżącej nazwy funkcji za pomocą Dash?
Odpowiedzi:
Z dowolnymi powłokami POSIX:
defun() {
eval "
$1() {
FUNCNAME=$1
$(cat)
}
"
}
defun g <<\}
printf '%s\n' "$FUNCNAME"
}
g
Zauważ, że nie można wywołać funkcji zdefiniowanej przez defun
treść funkcji zdefiniowanej przez defun
.
FUNCNAME
zmiennej, np. Używając /
jako separatora (nie sądzę, aby jakaś powłoka dopuszczała ukośniki w nazwach funkcji). Złapanie wszystkich instrukcji return byłoby jednak trudne, ale zamiast tego można było wykonać funkcje otoki.