web-dev-qa-db-fra.com

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

Existe-t-il une telle chose dans bash ou au moins quelque chose de similaire (contournement) comme les déclarations avancées, bien connues en C/C++, par exemple?

Ou il y en a tellement parce que par exemple, il est toujours exécuté en un seul passage (ligne après ligne)?

S'il n'y a pas de déclarations avancées, que dois-je faire pour faciliter la lecture de mon script. Il est assez long et ces définitions de fonctions au début, mélangées à des variables globales, rendent mon script laid et difficile à lire/à comprendre)? Je demande à connaître certaines pratiques bien connues/meilleures pour de tels cas.


Par exemple:

# something like forward declaration
function func

# execution of the function
func

# definition of func
function func
{
    echo 123
}
88
Kiril Kirov

Grande 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 réellement à s'exécuter qu'à la dernière ligne. En passant "$@" à main (), vous pouvez accéder aux arguments de la ligne de commande $1, $2, et al comme vous le feriez normalement.

177
John Kugelman

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

Fichier allMyFunctions:

foo() {
}

bar() {
}

baz() {
}

Fichier main:

#!/bin/bash

. allMyfunctions

foo
bar
baz
29
mouviciel