shell - shell ksh函数参数包含另一个要调用的函数名称

标签 shell error-handling function-pointers ksh

我正在尝试编写一个通用函数(例如holder)-该函数将第一个参数名称作为另一个函数名称(例如f1,f2,f3,f4...),并根据某些条件调用它们。喜欢

#!/bin/ksh
function f1
{
echo "f1"
return 7
}

function f2
{
echo "f2"
return 8
}

function holder
{
fptr=$1
`${fptr}`
ret=$?
echo $ret
}

holder "f1"
holder "f2"

现在上面的示例作品。但是,有时评估行${fptr}会在堆栈详细信息中发生奇怪的故障。我怀疑我调用该函数的方式可能存在一些问题。以上代码是示例模拟代码,实际代码包含复杂的f1,f2逻辑。
  • 是否可以处理这种间接调用?
  • Holder类中的“函数调用”是否正确?还是应该单独处理?
  • 最佳答案

    很难弄清是什么导致了您的案例中的零星失败。但是,您可能需要更改以下几项:

  • 您可能要使用eval而不是反引号。
  • 您可以使用$0引用函数名称

  • 执行修改后的代码:
    function f1 {
      echo $0
      return 7
    }
    
    function f2 {
      echo $0
      return 8
    }
    
    function holder {
      eval "$1"
      echo $?
    }
    
    holder "f1"
    holder "f2"
    

    返回:
    f1
    7
    f2
    8
    

    关于shell - shell ksh函数参数包含另一个要调用的函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17229243/

    相关文章:

    asp.net - gridview System.NullReferenceException : Object reference not set to an instance of an object.

    c - 函数指针的内存分配

    javascript - 传递 self (函数)

    bash - 通过shell脚本转义美元符号字符串

    powershell - 忽略特定行的 powershell 脚本失败

    用于检索唯一单词并与标点符号一起计数的 Linux 命令

    asp.net-mvc - 最佳实践错误处理ASP.Net MVC

    c++ - 在运行时动态创建 C++ 函数参数列表

    linux - 第 4 行 : syntax error near unexpected token `|'

    Linux 导出命令语法