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 mainfunció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 mainal final del archivo, todas las funciones ya están definidas. Se requiere pasar explícitamente "$@"a mainpara que los argumentos de la línea de comandos del script sean visibles en la función.
Lo explícito exiten 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 mainretornos. (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 sinMainser ejecutado. Entonces puedo reutilizar las funciones o escribir pruebas para verificarlas.main "$@"; exit(conexiten la misma línea quemain) también es útil como protección contra la modificación del archivo mientras se interpreta.exiten la misma línea ya quemainnos aseguramos de que el shell no volverá a leer nada del archivo después demainregresar.main; exit,main; exit $?omain <EOF>, en todo caso, el código de salidamainse utiliza como el código de salida del script. Estoexitserí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
mainfunción con cualquier parámetro que se le haya dado al script. Lamainfunció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
mainllamada, todas las funciones en el script se han analizado y, por lo tanto, se pueden llamar desde lamainfunció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
Ces cómodo.. yourfile).ifdeclaraciones simples fuera de una función. La función no tiene que definirse cuando declara laiffunción que contiene, solo cuando la llama .El shell no tiene el concepto de
declaringuna 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 fdeclara la función, pero su cuerpo solo se carga en la primera invocación). Sin embargo, eso no se aplica a los OPbash.