GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Rufen Sie die unten deklarierte Funktion auf

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.


Linux
  1. Ausführen einer benutzerdefinierten Funktion in einem Find -exec-Aufruf?

  2. Schwerwiegender Php-Fehler:Aufruf einer undefinierten Funktion Thesql_connect()?

  3. So erstellen und rufen Sie Funktionen in Bash auf

  4. Aufrufen von C-Funktionen in C++, C++-Funktionen in C (C und C++ mischen)

  5. Schwerwiegender Fehler:Aufruf einer undefinierten Funktion mb_substr() Fehler

So beheben Sie den Aufruf der undefinierten Funktion apc_fetch() – PHP Fatal Error [Gelöst]

Wie rufe ich eine Bash-Funktion in einem Bash-Skript in Awk auf?

Schwerwiegender Fehler:Aufruf der undefinierten Funktion curl_init()

Wie kann ich bekommen, was meine Hauptfunktion zurückgegeben hat?

Rufen Sie eine Userspace-Funktion innerhalb eines Linux-Kernel-Moduls auf

Rufen Sie eine C-Funktion aus C++-Code auf