我正在尝试编写一个泛型函数(比如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
逻辑。
答案 0 :(得分:1)
很难确定是什么原因导致您的案件出现零星失败。但是,您可能希望更改以下几项内容:
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