0

我正在尝试编写一个通用函数(例如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. 持有人类中的“函数调用”是否正确?还是应该单独处理?
4

1 回答 1

1

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

  1. 您可能想使用eval而不是反引号。
  2. 您可以使用引用函数名称$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
于 2013-06-21T13:10:40.127 回答