$LINENO
代表shell脚本的当前行号
[root@mysql-B ~]# cat test1.sh #!/bin/bash trap 'echo “before execute line:$LINENO, a=$a,b=$b,c=$c”' DEBUG a=1 if [ "$a" -eq 1 ] then b=2 else b=1 fi c=3 echo "end" [root@mysql-B ~]# ./test1.sh “before execute line:3, a=,b=,c=” “before execute line:4, a=1,b=,c=” “before execute line:6, a=1,b=,c=” “before execute line:10, a=1,b=2,c=” “before execute line:11, a=1,b=2,c=3” end
$FUNCNAME
表示函数的名字,它是一个数组变量,其中包含了整个调用链上所有的函数的名字,故变量${FUNCNAME[0]}代表shell脚本当前正在执行的函数的名字,而变量${FUNCNAME[1]}则代表调用函数${FUNCNAME[0]}的函数的名字,依此类推。
[root@mysql-B ~]# cat test1.sh #!/bin/bash test1() { echo "aaa" local a=${FUNCNAME[@]} echo $a } test2() { test1 } test2 [root@mysql-B ~]# ./test1.sh aaa test1 test2 main #输出结果为一个数组,第一个是被调用的函数名称,第二个是调用的函数名称,
想只输出被调用的函数名称时,把@替换成0,想输入调用函数的名称时,@替换成1