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.