GNU/Linux >> Znalost Linux >  >> Linux

volání funkce deklarované níže

Jak řekli jiní, nemůžete to udělat.

Ale pokud chcete uspořádat kód do jednoho souboru tak, aby hlavní program byl v horní části souboru a další funkce byly definovány níže, můžete to udělat tak, že budete mít samostatný main funkce.

Např.

#!/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

Když zavoláme main na konci souboru jsou již všechny funkce definovány. Explicitně předává "[email protected]" do main je vyžadováno, aby byly argumenty příkazového řádku skriptu viditelné ve funkci.

Explicitní exit na stejném řádku jako volání main není povinné, ale lze jej použít k zabránění zmatku běžícího skriptu, pokud je soubor skriptu upraven. Bez něj by se shell pokusil pokračovat ve čtení příkazů ze souboru skriptu po main se vrací. (viz Jak číst celý skript shellu před jeho spuštěním?)


Ne, funkce musí existovat v prostředí shellu v době jejich volání.

„Průvodce stylem Shell“ společnosti Google má toto řešení:

Funkce s názvem main je vyžadován pro skripty dostatečně dlouhé na to, aby obsahovaly alespoň jednu další funkci.

Na samém konci skriptu, po všech funkcích, jako jediný příkaz, který není ve funkci, byste měli

main "[email protected]"

To by zavolalo main funkce s jakýmikoli parametry, které skript dostal. main funkce by mohla být umístěna v horní části skriptu (průvodce stylem říká, že ji umístěte dole, ale zase říká mnoho věcí).

Když se shell dostane na main všechny funkce ve skriptu byly analyzovány a lze je tedy volat z main funkce.


Ne, funkce musí být deklarovány před jejich použitím. Skripty shellu se čtou řádek po řádku a postupuje se podle nich řádek po řádku; takže funkce neexistuje, dokud není provedena její deklarace.


Linux
  1. Volání nedefinované funkce simplexml_load_file() – chyba PHP [vyřešeno]

  2. Jak opravit volání nedefinované funkce apc_fetch() – Závažná chyba PHP [Vyřešeno]

  3. Jak volat funkci C v C++, funkci C++ v C (Mix C a C++)

  1. Jak implementovat časový limit ve volání funkce čtení?

  2. Proč hlavní funkce bez příkazu return vrací hodnotu 12?

  3. Jak mohu získat to, co se mi vrátila hlavní funkce?

  1. Provádění uživatelem definované funkce ve volání Find -exec?

  2. Volání funkce uživatelského prostoru z modulu jádra Linuxu

  3. Volání funkce C z kódu C++