${FUNCNAME[@]}和$LINENO使用

$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
原文地址:https://www.cnblogs.com/zx3212/p/9335656.html