我认为没有人完全回答这个问题。他没有问他是否可以按顺序回显字符串。而是问题的作者想知道他是否可以模拟函数指针行为。
有几个答案很像我要做的,我想用另一个例子来扩展它。
来自作者:
function x() {
echo "Hello world"
}
function around() {
echo "before"
($1) <------ Only change
echo "after"
}
around x
为了扩展它,我们将使用 function x echo "Hello world:$1" 来显示函数执行的真正时间。我们将传递一个字符串,它是函数“x”的名称:
function x() {
echo "Hello world:$1"
}
function around() {
echo "before"
($1 HERE) <------ Only change
echo "after"
}
around x
为了描述这一点,字符串“x”被传递给函数around(),它回显“before”,调用函数x(通过变量$1,传递给around的第一个参数)传递参数“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,我们执行存储在变量 Z 中的名为“x”的函数并传递参数 10 20 和 30。
在上面我们通过为函数分配变量名称来引用函数,这样我们就可以使用变量来代替实际知道函数名称(这类似于您在 c 中用于泛化程序的非常经典的函数指针情况中可能会做的事情流,但预先选择您将根据命令行参数进行的函数调用)。
在 bash 中,这些不是函数指针,而是引用您以后使用的函数名称的变量。