116 votes

Déclarations de fonctions Forward dans un Bash ou un Shell script ?

Est-ce qu'il y a une telle chose dans bash ou au moins quelque chose de similaire (solution de contournement) comme les déclarations prospectives, bien connues en C / C++, par exemple ?

Ou bien cela n'existe pas car, par exemple, il est toujours exécuté en une seule fois (ligne après ligne) ?

S'il n'y a pas de déclarations en avant, que dois-je faire pour rendre mon script plus facile à lire. Il est plutôt long et ces définitions de fonctions au début, mélangées aux variables globales, rendent mon script laid et difficile à lire / comprendre) ? Je demande à apprendre quelques pratiques connues / meilleures pratiques pour de tels cas.


Par exemple :

# something like forward declaration
function func

# execution of the function
func

# definition of func
function func
{
    echo 123
}

223voto

John Kugelman Points 108754

Excellente question. J'utilise un modèle comme celui-ci pour la plupart de mes scripts :

#!/bin/bash

main() {
    foo
    bar
    baz
}

foo() {
}

bar() {
}

baz() {
}

main "$@"

Vous pouvez lire le code de haut en bas, mais il ne commence pas à s'exécuter avant la dernière ligne. En passant "$@" à main() vous pouvez accéder aux arguments de la ligne de commande $1 , $2 et autres, comme vous le feriez normalement.

34voto

mouviciel Points 36624

Lorsque mes scripts bash grossissent trop, j'utilise un mécanisme d'inclusion :

Fichier allMyFunctions :

foo() {
}

bar() {
}

baz() {
}

Fichier main :

#!/bin/bash

. allMyfunctions

foo
bar
baz

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X