我想从函数内部获取函数名称,用于记录目的。在KornShell脚本中获取函数名称
KornShell(KSH)功能:
foo()
{
echo "get_function_name some useful output"
}
有什么类似$0
,它返回脚本名称脚本中,但是这反而提供了一个函数的名字?
我想从函数内部获取函数名称,用于记录目的。在KornShell脚本中获取函数名称
KornShell(KSH)功能:
foo()
{
echo "get_function_name some useful output"
}
有什么类似$0
,它返回脚本名称脚本中,但是这反而提供了一个函数的名字?
使用ksh的 “函数foo ...” 的形式:
$ cat foo1
#!/bin/ksh
foo3() { echo "\$0=$0"; }
function foo2 { echo "\$0=$0"; }
foo2
foo3
$ ./foo1
$0=foo2
$0=./foo1
如果定义与function
关键字的功能,那么$0
是函数名称:
$ function foo {
> echo "$0"
> }
$ foo
foo
(测试中的pdksh。)
完美,工作正常!使用关键字函数的主要优点/缺点是什么?在我的地方,人们似乎使用ksh88(很难说清楚),但我在脚本中没有看到一个函数关键字 – Dima
@Dima:'function'使得它成为一个Korn shell函数,它具有'$ 0'。另一种形式适用于System V/POSIX兼容性。 –
[...]什么是使用关键字功能的主要优点/缺点?
主要的是,函数内部的“typeset myvar = abc”现在是一个局部变量,函数外面没有可能的副作用。这使得KSH显着更安全的大型shell脚本。主要的可能是非POSIX语法。
这个问题的题外话:对于bash,使用[FUNCNAME](http://www.gnu.org/software/bash/manual/bashref.html#index-FUNCNAME-193)数组变量。 –