GNU/Linux >> Linux Esercitazione >  >> Linux

funzione di chiamata dichiarata di seguito

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.


Linux
  1. Esecuzione di una funzione definita dall'utente in una chiamata Find -exec?

  2. Come chiamare una funzione Bash nello script Bash all'interno di Awk?

  3. Come creare e chiamare funzioni in Bash

  4. Come chiamare la funzione C in C++, la funzione C++ in C (mix di C e C++)

  5. Errore irreversibile:chiamata alla funzione non definita mb_substr() Errore

Errore irreversibile PHP:chiamata a funzione non definita Thesql_connect()?

Perché una funzione principale senza un'istruzione return restituisce il valore 12?

Quando verificare la presenza di EINTR e ripetere la chiamata di funzione?

exit() può non riuscire a terminare il processo?

Il kernel Linux ha la funzione principale?

Chiamata di sistema fork() e funzione execv