我正在尝试编写一个通用函数(例如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
逻辑。最佳答案
很难弄清是什么导致了您的案例中的零星失败。但是,您可能需要更改以下几项:
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/