Como han dicho otros, no puedes hacer eso.
Pero si desea organizar el código en un archivo para que el programa principal esté en la parte superior del archivo y otras funciones se definan a continuación, puede hacerlo si tiene un main
separado. función.
P.ej.
#!/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
Cuando llamamos main
al final del archivo, todas las funciones ya están definidas. Pasando explícitamente "[email protected]"
a main
es necesario para que los argumentos de la línea de comandos del script sean visibles en la función.
El exit
explícito en la misma línea que la llamada a main no es obligatoria, pero se puede usar para evitar que una secuencia de comandos en ejecución se estropee si se modifica el archivo de secuencia de comandos. Sin él, el shell intentaría continuar leyendo los comandos del archivo de script después de main
devoluciones. (consulte ¿Cómo leer todo el script de shell antes de ejecutarlo?)
No, las funciones deben existir en el entorno de shells en el momento de llamarlas.
La "Guía de estilo de Shell" de Google tiene una solución para esto:
Una función llamada main
se requiere para secuencias de comandos lo suficientemente largas como para contener al menos otra función.
Al final del script, después de todas las funciones, como la única declaración que no está en una función, tendría
main "[email protected]"
Esto llamaría al main
función con los parámetros que se le dio la secuencia de comandos. El main
La función podría ubicarse en la parte superior del script (la guía de estilo dice que debe colocarse en la parte inferior, pero, de nuevo, dice muchas cosas).
Cuando el shell llega al main
llamada, todas las funciones en el script han sido analizadas y, por lo tanto, se pueden llamar desde dentro del main
función.
No, las funciones deben declararse antes de usarse. Los scripts de shell se leen línea por línea y se ejecutan línea por línea; por lo que una función no existe hasta que se haya ejecutado su declaración.