Wie andere schon gesagt haben, das geht nicht.
Aber wenn Sie den Code in einer Datei so anordnen möchten, dass das Hauptprogramm am Anfang der Datei steht und andere Funktionen darunter definiert sind, können Sie dies tun, indem Sie einen separaten main
haben Funktion.
Z.B.
#!/bin/sh
main() {
if [ "$1" = yes ]; then
do_task_this
else
do_task_that
fi
}
do_task_this() {
...
}
do_task_that() {
...
}
main "[email protected]"; exit
Wenn wir main
anrufen Am Ende der Datei sind alle Funktionen bereits definiert. Explizites Übergeben von "[email protected]"
bis main
wird benötigt, um die Kommandozeilenargumente des Skripts in der Funktion sichtbar zu machen.
Die explizite exit
in derselben Zeile wie der Aufruf von main ist nicht obligatorisch, kann aber verwendet werden, um zu verhindern, dass ein laufendes Skript durcheinandergebracht wird, wenn die Skriptdatei geändert wird. Ohne sie würde die Shell versuchen, nach main
weiterhin Befehle aus der Skriptdatei zu lesen kehrt zurück. (siehe Wie lese ich das gesamte Shell-Skript, bevor ich es ausführe?)
Nein, die Funktionen müssen zum Zeitpunkt des Aufrufs in der Shell-Umgebung existieren.
Googles "Shell Style Guide" hat eine Lösung dafür:
Eine Funktion namens main
ist für Skripte erforderlich, die lang genug sind, um mindestens eine weitere Funktion zu enthalten.
Ganz am Ende des Skripts, schließlich Funktionen, als einzige Anweisung, die nicht in einer Funktion enthalten ist, hätten Sie
main "[email protected]"
Dies würde den main
aufrufen Funktion mit den Parametern, die dem Skript gegeben wurden. Die main
Die Funktion könnte sich oben im Skript befinden (der Styleguide sagt, dass sie unten stehen soll, aber andererseits sagt sie viele Dinge).
Wenn die Shell den main
erreicht aufrufen, alle Funktionen im Skript wurden geparst und können daher innerhalb von main
aufgerufen werden Funktion.
Nein, Funktionen müssen deklariert werden, bevor sie verwendet werden. Shell-Skripte werden Zeile für Zeile gelesen und Zeile für Zeile bearbeitet; eine Funktion existiert also nicht, bis ihre Deklaration ausgeführt wurde.