【发布时间】:2011-12-30 14:30:18
【问题描述】:
我想从函数中获取函数名称,用于记录目的。
KornShell (ksh) 函数:
foo ()
{
echo "get_function_name some useful output"
}
有没有类似于$0 的东西,它返回脚本中的脚本名称,但它提供了一个函数的名称?
【问题讨论】:
-
离题:对于 bash,使用 FUNCNAME 数组变量。
我想从函数中获取函数名称,用于记录目的。
KornShell (ksh) 函数:
foo ()
{
echo "get_function_name some useful output"
}
有没有类似于$0 的东西,它返回脚本中的脚本名称,但它提供了一个函数的名称?
【问题讨论】:
下面的函数似乎在 Bash 和 ksh 中都有它的名字:
# ksh or bash
function foo {
local myname="${FUNCNAME[0]:-$0}"
echo "$myname"
}
# test
foo
# ...
【讨论】:
使用 ksh "function foo ..." 形式:
$ cat foo1
#!/bin/ksh
foo3() { echo "\$0=$0"; }
function foo2 { echo "\$0=$0"; }
foo2
foo3
$ ./foo1
$0=foo2
$0=./foo1
【讨论】:
[...] 使用关键字函数的主要优点/缺点是什么?
主要优点是函数内部的“typeset myvar=abc”现在是一个局部变量,函数外部没有可能的副作用。这使得 KSH 对于大型 shell 脚本更加安全。主要缺点可能是非 POSIX 语法。
【讨论】:
如果你用function关键字定义函数,那么$0就是函数名:
$ function foo {
> echo "$0"
> }
$ foo
foo
(在 pdksh 中测试。)
【讨论】:
function 使它成为一个 Korn shell 函数,它有一个 $0。另一种形式存在于 System V/POSIX 兼容性。