จากคู่มืออ้างอิง Bash :
FUNCNAME
ตัวแปรอาร์เรย์ที่มีชื่อของฟังก์ชั่นเชลล์ทั้งหมดในปัจจุบันในการเรียกการเรียกใช้งาน องค์ประกอบที่มีดัชนี 0 เป็นชื่อของฟังก์ชั่นเปลือกที่กำลังดำเนินการใด ๆ ในปัจจุบัน องค์ประกอบด้านล่างสุด (องค์ประกอบที่มีดัชนีสูงสุด) คือ "หลัก" ตัวแปรนี้มีอยู่เฉพาะเมื่อมีการเรียกใช้ฟังก์ชันเชลล์ การกำหนดให้กับ FUNCNAME ไม่มีผลกระทบและส่งคืนสถานะข้อผิดพลาด หาก FUNCNAME ไม่ได้ตั้งค่ามันจะสูญเสียคุณสมบัติพิเศษแม้ว่าจะถูกรีเซ็ตในภายหลัง
ตัวแปรนี้สามารถใช้กับ BASH_LINENO และ BASH_SOURCE แต่ละองค์ประกอบของ FUNCNAME มีองค์ประกอบที่สอดคล้องกันใน BASH_LINENO และ BASH_SOURCE เพื่ออธิบายสายการโทร ตัวอย่างเช่น $ {FUNCNAME [$ i]} ถูกเรียกจากไฟล์ $ {BASH_SOURCE [$ i + 1]} ที่หมายเลขบรรทัด $ {BASH_LINENO [$ i]} ตัวเรียกในตัวแสดงสแต็กการโทรปัจจุบันโดยใช้ข้อมูลนี้
เมื่อเข้าถึง bash arrays โดยไม่มีดัชนีองค์ประกอบแรกของอาร์เรย์จะถูกส่งคืนดังนั้น$FUNCNAME
จะทำงานในกรณีง่าย ๆ เพื่อระบุชื่อของฟังก์ชันปัจจุบันทันที แต่ก็ยังมีฟังก์ชันอื่น ๆ ทั้งหมดใน call stack ตัวอย่างเช่น:
# 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
อาร์เรย์และตัวแปรอื่น ๆ ทุบตี: github.com/codeforester/base/blob/master/lib/stdlib.sh ดูฟังก์ชั่นlog_debug_enter
และlog_debug_leave
โดยเฉพาะอย่างยิ่ง