2011-11-16 32 views
6

我想从函数内部获取函数名称,用于记录目的。在KornShell脚本中获取函数名称

KornShell(KSH)功能:

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

有什么类似$0,它返回脚本名称脚本中,但是这反而提供了一个函数的名字?

+0

这个问题的题外话:对于bash,使用[FUNCNAME](http://www.gnu.org/software/bash/manual/bashref.html#index-FUNCNAME-193)数组变量。 –

回答

5

使用ksh的 “函数foo ...” 的形式:

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

如果定义与function关键字的功能,那么$0是函数名称:

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

(测试中的pdksh。)

+0

完美,工作正常!使用关键字函数的主要优点/缺点是什么?在我的地方,人们似乎使用ksh88(很难说清楚),但我在脚本中没有看到一个函数关键字 – Dima

+0

@Dima:'function'使得它成为一个Korn shell函数,它具有'$ 0'。另一种形式适用于System V/POSIX兼容性。 –

5

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

主要的是,函数内部的“typeset myvar = abc”现在是一个局部变量,函数外面没有可能的副作用。这使得KSH显着更安全的大型shell脚本。主要的可能是非POSIX语法。