获取 KornShell 脚本中的函数名称

发布于 2024-12-15 19:06:36 字数 199 浏览 1 评论 0原文

我想从函数内部获取函数名称,以用于记录目的。

KornShell (ksh) 函数:

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

是否有类似于 $0 的函数,它返回脚本内的脚本名称,但提供函数名称?

I'd like to get the function name from within the function, for logging purposes.

KornShell (ksh) function:

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

Is there anything similar to $0, which returns the script name within scripts, but which instead provides a function's name?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

软糯酥胸 2024-12-22 19:06:36

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

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

在 pdksh 中测试。)

If you define the function with the function keyword, then $0 is the function name:

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

(Tested in pdksh.)

小梨窩很甜 2024-12-22 19:06:36

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

主要优点是函数内部的“typeset myvar=abc”现在是一个局部变量,在函数外部不会产生任何副作用。这使得 KSH 对于大型 shell 脚本来说明显更安全。主要的缺点也许是非 POSIX 语法。

[...] what are the main pros/cons of using keyword function?

Main pro is that "typeset myvar=abc" inside the function is now a local variable, with no possible side effects outside the function. This makes KSH noticeably safer for large shell scripts. Main con is, perhaps, the non-POSIX syntax.

一曲琵琶半遮面シ 2024-12-22 19:06:36

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

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

Use the ksh "function foo ..." form:

$ cat foo1
#!/bin/ksh
foo3() { echo "\$0=$0"; }
function foo2 { echo "\$0=$0"; }
foo2
foo3
$ ./foo1
$0=foo2
$0=./foo1
乖不如嘢 2024-12-22 19:06:36

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

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

The function below seems to get its name in both Bash and ksh:

# ksh or bash
function foo {
  local myname="${FUNCNAME[0]:-$0}"
  echo "$myname"
}
# test
foo
# ...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文