Come altri hanno detto, non puoi farlo.
Ma se vuoi disporre il codice in un file in modo che il programma principale sia in cima al file e altre funzioni siano definite di seguito, puoi farlo avendo un main
separato funzione.
Per esempio.
#!/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
Quando chiamiamo main
alla fine del file, tutte le funzioni sono già definite. Passaggio esplicito di "[email protected]"
a main
è necessario per rendere visibili nella funzione gli argomenti della riga di comando dello script.
L'esplicito exit
sulla stessa riga della chiamata a main non è obbligatoria, ma può essere utilizzata per evitare che uno script in esecuzione venga danneggiato se il file di script viene modificato. Senza di esso, la shell proverebbe a continuare a leggere i comandi dal file di script dopo main
ritorna. (vedi Come leggere l'intero script della shell prima di eseguirlo?)
No, le funzioni devono esistere nell'ambiente shell al momento della loro chiamata.
La "Shell Style Guide" di Google ha una soluzione per questo:
Una funzione chiamata
main
è richiesto per gli script sufficientemente lunghi da contenere almeno un'altra funzione.
Alla fine dello script, dopo tutte le funzioni, come unica istruzione non in una funzione, avresti
main "[email protected]"
Questo chiamerebbe il main
funzione con qualsiasi parametro sia stato fornito allo script. L'main
la funzione potrebbe trovarsi all'inizio dello script (la guida di stile dice di metterla in fondo, ma poi dice molte cose).
Quando la shell arriva al main
call, tutte le funzioni nello script sono state analizzate e possono quindi essere chiamate dall'interno di main
funzione.
No, le funzioni devono essere dichiarate prima di essere utilizzate. Gli script di shell vengono letti riga per riga e agiti riga per riga; quindi una funzione non esiste finché la sua dichiarazione non è stata eseguita.