Ich glaube nicht, dass jemand die Frage ganz beantwortet hat. Er fragte nicht, ob er die Saiten in der richtigen Reihenfolge wiedergeben könne. Vielmehr möchte der Autor der Frage wissen, ob er das Verhalten von Funktionszeigern simulieren kann.
Es gibt einige Antworten, die meinen Vorstellungen sehr ähnlich sind, und ich möchte sie um ein weiteres Beispiel erweitern.
Vom Autor:
function x() {
echo "Hello world"
}
function around() {
echo "before"
($1) <------ Only change
echo "after"
}
around x
Um dies zu erweitern, wird die Funktion x echo "Hello world: $ 1" angezeigt, um anzuzeigen, wann die Funktionsausführung tatsächlich erfolgt. Wir werden eine Zeichenfolge übergeben, die der Name der Funktion "x" ist:
function x() {
echo "Hello world:$1"
}
function around() {
echo "before"
($1 HERE) <------ Only change
echo "after"
}
around x
Um dies zu beschreiben, wird die Zeichenfolge "x" an die Funktion around () übergeben, die "before" wiedergibt, die Funktion x (über die Variable $ 1, den ersten Parameter, der an around übergeben wird) aufruft und das Argument "HERE" übergibt .
Abgesehen davon ist dies die Methode, um Variablen als Funktionsnamen zu verwenden. Die Variablen enthalten tatsächlich die Zeichenfolge, die der Name der Funktion ist, und ($ variable arg1 arg2 ...) ruft die Funktion auf, die die Argumente übergibt. Siehe unten:
function x(){
echo $3 $1 $2 <== just rearrange the order of passed params
}
Z="x" # or just Z=x
($Z 10 20 30)
ergibt: 30 10 20, wobei wir die in der Variablen Z gespeicherte Funktion "x" ausgeführt und die Parameter 10 20 und 30 übergeben haben.
Oben, wo wir Funktionen referenzieren, indem wir den Funktionen Variablennamen zuweisen, damit wir die Variable verwenden können, anstatt den Funktionsnamen tatsächlich zu kennen (ähnlich wie Sie es in einer sehr klassischen Funktionszeigersituation in c tun könnten, um den Programmfluss zu verallgemeinern, aber vor - Auswahl der Funktionsaufrufe, die Sie basierend auf Befehlszeilenargumenten ausführen).
In Bash sind dies keine Funktionszeiger, sondern Variablen, die sich auf Namen von Funktionen beziehen, die Sie später verwenden.