我不认为有人会回答这个问题。他没有问他是否可以按顺序回音。问题的作者想知道他是否可以模拟函数指针行为。
有几个答案很像我会做的,我想用另一个例子来扩展它。
从笔者:
function x() {
echo "Hello world"
}
function around() {
echo "before"
($1) <------ Only change
echo "after"
}
around x
为了扩大这一点,我们将有函数x回声“世界,你好:$ 1”,显示当函数执行真正发生。我们将通过一个字符串,它的功能是“X”的名称:)传递给函数左右(其中回声报“之前”
function x() {
echo "Hello world:$1"
}
function around() {
echo "before"
($1 HERE) <------ Only change
echo "after"
}
around x
为了说明这一点,字符串“X”,调用函数x (通过变量$ 1,第一个传递给参数的参数)传递参数“HERE”,最后回声。
另一方面,这是使用变量作为函数名称的方法。变量实际上包含作为函数名称的字符串,并且($ variable arg1 arg2 ...)调用传递参数的函数。见下文:
function x(){
echo $3 $1 $2 <== just rearrange the order of passed params
}
Z="x" # or just Z=x
($Z 10 20 30)
给出:30 10 20,在那里我们执行命名的函数“X”存储在变量Z和通过分配的变量名传递的参数10 20和30
以上在这里我们参考函数所以我们可以使用变量来代替实际知道函数名称的地方(这类似于你在c中的一个非常经典的函数指针情况下可以做的事情,用于推广程序流但是预先选择你将要进行的函数调用基于命令行参数)。
在bash中,这些不是函数指针,而是指向稍后使用的函数名称的变量。
eval是唯一的方法。 – Wes 2011-04-15 04:18:05
你可以很容易地检查'eval $ 1'是否会使用'if declare -F“$ 1”>/dev/null来调用一个函数;然后评估$ 1; fi' – user123444555621 2011-04-15 04:26:14
...或甚至更好:'eval $(declare -F“$ 1”)' – user123444555621 2011-04-15 04:58:03