Jika saya memiliki skrip Bash seperti:
#!/bin/bash
f() {
# echo function name, "f" in this case
}
Apakah ada cara untuk melakukan ini? Ini dapat digunakan dalam pesan bantuan seperti
printf "Usage: %s: blah blah blah \n" $(basename $0) >&2;
Hanya dalam hal ini yang saya inginkan bukan $0
, yang merupakan nama file dari skrip.
FUNCNAME
array dan variabel Bash lainnya: github.com/codeforester/base/blob/master/lib/stdlib.sh . Lihat fungsilog_debug_enter
danlog_debug_leave
khususnya.Jawaban:
Anda dapat menggunakan
${FUNCNAME[0]}
dibash
untuk mendapatkan nama fungsi.sumber
Dari Manual Referensi Bash :
Ketika bash array diakses tanpa indeks, elemen pertama dari array akan dikembalikan, sehingga
$FUNCNAME
akan bekerja dalam kasus-kasus sederhana untuk memberikan nama fungsi segera saat ini, tetapi juga mengandung semua fungsi lain di tumpukan panggilan. Sebagai contoh:Akan menghasilkan:
sumber
[0]
jika itu tersirat dengan mengakses variabel yang tidak didekorasi?Saya gunakan
${FUNCNAME[0]}
untuk mencetak nama fungsi saat inisumber
Contoh lain:
Akan menghasilkan:
sumber
Cara paling sederhana untuk mendapatkan nama fungsi (dari dalam suatu fungsi)
sumber
###
jawaban Anda.