在KornShell脚本中获取函数名称

时间:2011-11-16 16:27:48

标签: shell unix scripting ksh

我想从函数中获取函数名,以便进行日志记录。

KornShell(ksh)函数:

foo ()
{
    echo "get_function_name some useful output"
}

是否有类似$0的内容,它在脚本中返回脚本名称,但是它提供了一个函数的名称?

4 个答案:

答案 0 :(得分:9)

如果使用function关键字定义函数,则$0是函数名称:

$ function foo {
>     echo "$0"
> }
$ foo
foo

(在pdksh中测试。)

答案 1 :(得分:5)

使用ksh“function foo ...”形式:

$ cat foo1
#!/bin/ksh
foo3() { echo "\$0=$0"; }
function foo2 { echo "\$0=$0"; }
foo2
foo3
$ ./foo1
$0=foo2
$0=./foo1

答案 2 :(得分:5)

  

[...]使用关键字功能的主要优点是什么?

主要专业是"排版myvar = abc"函数内部现在是一个局部变量,在函数外没有可能的副作用。这使得KSH对于大型shell脚本显然更安全。主要的可能是非POSIX语法。

答案 3 :(得分:0)

下面的函数似乎在Bash和ksh中都得到了它的名字:

# ksh or bash
function foo {
  local myname="${FUNCNAME[0]:-$0}"
  echo "$myname"
}
# test
foo
# ...