Como otros han dicho, 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 definen a continuación, puede hacerlo teniendo una main
función separada .
P.ej
#!/bin/sh
main() {
if [ "$1" = yes ]; then
do_task_this
else
do_task_that
fi
}
do_task_this() {
...
}
do_task_that() {
...
}
main "$@"; exit
Cuando llamamos main
al final del archivo, todas las funciones ya están definidas. Se requiere pasar explícitamente "$@"
a main
para que los argumentos de la línea de comandos del script sean visibles en la función.
Lo explícito exit
en la misma línea que la llamada a main no es obligatorio, pero puede usarse para evitar que un script en ejecución se estropee si se modifica el archivo de script. Sin él, el shell intentaría continuar leyendo los comandos del archivo de script después de los main
retornos. (consulte ¿Cómo leer todo el script de shell antes de ejecutarlo? )
[[ ${BASH_SOURCE[0]} = "$0" ]] && Main "$@"
para llamar a la función principal para poder obtenerlo en otro script sinMain
ser ejecutado. Entonces puedo reutilizar las funciones o escribir pruebas para verificarlas.main "$@"; exit
(conexit
en la misma línea quemain
) también es útil como protección contra la modificación del archivo mientras se interpreta.exit
en la misma línea ya quemain
nos aseguramos de que el shell no volverá a leer nada del archivo después demain
regresar.main; exit
,main; exit $?
omain <EOF>
, en todo caso, el código de salidamain
se utiliza como el código de salida del script. Estoexit
sería solo para evitar que las cosas se estropeen si alguien edita el script mientras se está ejecutando.No, las funciones tienen que existir en el entorno de shells al momento de llamarlas.
La "Guía de estilo de Shell" de Google tiene una solución para esto:
Al final del script, después de todas las funciones, como la única declaración que no está en una función, tendría
Esto llamaría a la
main
función con cualquier parámetro que se le haya dado al script. Lamain
función podría ubicarse en la parte superior de la secuencia de comandos (la guía de estilo dice ponerla en la parte inferior, pero, de nuevo, dice muchas cosas).Cuando el shell llega a la
main
llamada, todas las funciones en el script se han analizado y, por lo tanto, se pueden llamar desde lamain
función.fuente
No, las funciones deben declararse antes de ser utilizadas. Los scripts de shell se leen línea por línea y actúan línea por línea; entonces una función no existe hasta que su declaración ha sido ejecutada.
fuente
C
es cómodo.. yourfile
).if
declaraciones simples fuera de una función. La función no tiene que definirse cuando declara laif
función que contiene, solo cuando la llama .El shell no tiene el concepto de
declaring
una función. Por lo tanto, no puede tener una declaración adelantada.Como consecuencia, debe tener la implementación de la función leída por el shell antes de que pueda ser invocada.
fuente
autoload f
declara la función, pero su cuerpo solo se carga en la primera invocación). Sin embargo, eso no se aplica a los OPbash
.