【问题标题】:Get function name in KornShell script在 KornShell 脚本中获取函数名称
【发布时间】:2011-12-30 14:30:18
【问题描述】:

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

KornShell (ksh) 函数:

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

有没有类似于$0 的东西,它返回脚本中的脚本名称,但它提供了一个函数的名称?

【问题讨论】:

  • 离题:对于 bash,使用 FUNCNAME 数组变量。

标签: shell unix scripting ksh


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    使用 ksh "function foo ..." 形式:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        如果你用function关键字定义函数,那么$0就是函数名:

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

        (在 pdksh 中测试。)

        【讨论】:

        • 完美,工作正常!使用关键字功能的主要优点/缺点是什么?在我这里,人们似乎使用 ksh88(很难确定),但我没有在脚本中看到单个函数关键字
        • @Dima: function 使它成为一个 Korn shell 函数,它有一个 $0。另一种形式存在于 System V/POSIX 兼容性。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-12
        • 1970-01-01
        • 2010-11-22
        • 2014-05-21
        • 2011-05-08
        • 1970-01-01
        相关资源
        最近更新 更多