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

时间:2013-06-21 06:49:05

标签: 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逻辑。

  1. 是否可以处理这种间接调用?
  2. 持有者类中的“函数调用”是否正确?还是应该以单独的方式处理?

1 个答案:

答案 0 :(得分:1)

很难确定是什么原因导致您的案件出现零星失败。但是,您可能希望更改以下几项内容:

  1. 您可能希望使用eval而不是反对。
  2. 您可以使用$0
  3. 来参考功能名称

    执行修改后的代码:

    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