A propos des variables de type local en Bash.
Tout d'abord, la sécurité.
Afin d'écrire plus rapidement, on se retrouve souvent à déclarer et initialiser la variable en même temps :
local var="plouf plouf"
Sauf qu'en faisant ça, l'ordre d'exécution est le suivant :
Ce qui signifie que la variable reste accessible pendant un instant au niveau global. Il faut donc mieux faire la déclaration et l'instanciation en deux temps :
local var
var="plouf plouf"
Ce qui m'amène au deuxième point. Une fois qu'une variable a été déclarée local, il n'est pas besoin de remettre le mot-clef local à chaque instanciation. Ainsi, si je considère le script suivant :
#/usr/bin/env bash
ma_fonction()
{
local var = "ALEX"
echo "$var"
var="TOM"
echo "$var"
}
ma_fonction
echo "<$var>"
La sortie sera :
ALEX
TOM
<>
La variable d'environnement LANG sous Linux, contient la valeur liée aux paramètres locaux (langue, clavier, ...).
Elle vaut en général quelquechose comme ça:
fr_FR.utf8
es_EC.utf8
en_US.utf8
etc
Mais parfois, on voit cette variable LANG changer de valeur. En particulier, lors d'une compilation en langage C.
On voit alors:
LANG=C
Mais cela n'a (presque) rien a voir avec le fait que c'est le langage C qui est en jeu.
La "locale" C est une convention POSIX qui permet d'anticiper les sorties de certains outils tels que grep. Cette locale C permet en outre d'augmenter les performances de ces mêmes outils, en n'utilisant pas l'UTF8.
Enfin, la langue de cette locale est l'anglais. Eh oui.
Du coup au lieu de faire ça:
$ echo $LANG
$ fr_FR.utf8
$ LANG=C
$ echo oui | commande
On fait ça:
$ echo $LANG
$ fr_FR.utf8
$ LANG=C
$ echo yes | commande