Bash variable locale et POSIX

pour essayer d'avoir les bonnes pratiques...

a marqué ce sujet comme résolu.

Bonjour tout le monde,

Depuis deux jours je reprends mes scripts bash pour les améliorer: je mets les différentes fonctions dans des fonctions (dit comme ça c’est étrange :D ), je fais du « quoting » pour éviter les erreurs, etc.

Bref, j’essaie d’appliquer les bonnes pratiques du bash étant donné que c’est un langage que j’ai appris sur le tas. Mais aujourd’hui j’ai décidé d’aller plus loin en rendant mes scripts compatibles POSIX et je suis confronté à un problème majeur : les variables locales.

fonction() {
    local texte="un texte"
}

le mot clef local n’est apparemment pas dans la norme… Je ne sais donc pas comment remplacer ça pour que mes fonctions contiennent des variables locales.

Est-ce que quelqu’un saurait comment faire ?

Merci d’avance ;)

+0 -0

Salut,

Tu pourrais utiliser unset [-fv] name pour "émuler" (dans le sens où la valeur ne va pas "leaker" en dehors de la fonction) des variables locales. Si tout est local dans la fonction, tu peux aussi mettre le corps dans un subshell avec () au lieu d’un groupe avec {}.

Cela dit, tu n’as pas forcément de bonne raison de vouloir te conformer à POSIX. Les cas d’usage pertinent est lorsque tu vises une très grande portabilité sur des environnements un peu obscurs, très divers, sur lesquels tu n’as pas la main, et que les scripts shell sont la seule option viable de scripting (autrement dit, quasiment jamais). Par ailleurs, faire du shell scripting respectant POSIX, c’est différent de faire du bash. Si tu sais que tu as accès à bash partout où tu es susceptible de faire tourner tes scripts (ce qui est très probablement le cas, bash étant étrangement le shell par défaut et quasi-universel), tu gagnerais à écrire du bash plutôt que te restreindre à POSIX.

+2 -0

Merci @adri1, je prends note aussi pour ta remarque sur la non nécessité de faire du POSIX. en fait, je voulais faire du POSIX en pensant que c’était la bonne pratique shell et que c’était nécessaire pour que le script fonctionne sans aucun problème, ce qui n’est comme tu l’as dit pas le cas, car tous les systèmes ont quasiment bash d’installé.

Concernant les subshells, est-ce que tu veux aussi dire qu’une fonction peut s’écrire ainsi ?

fonction() (
    echo "une chose"
)

Salut,

Un premier conseil que je peux donner pour améliorer tes scripts Bash est d’utiliser l’outil ShellCheck. Pour ta question à propos de local, tu peux consulter leur page à ce sujet. Je suis par ailleurs d’accord avec @adri1, les scripts purs POSIX ne sont indispensables que dans des cas très particuliers ; il vaut mieux améliorer tes connaissances en Bash, ce sera beaucoup plus profitable. En outre, lorsque tu veux écrire un petit script, il est bon de garder à l’esprit que l’on peut utiliser des langages plus évolués qui restent néanmoins très simples d’utilisation, comme Python, même si ce n’est pas toujours possible.

Enfin en termes de ressources, je conseille en premier lieu les trois premiers chapitres de ce guide. Bien que n’étant pas terminé et semblant à l’abandon, c’est la seule ressource que je connaisse qui part vraiment du début et pose précisément les fondations. Ce wiki est également une source d’informations et d’aide très utile.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte