Les paramètres et autres types d'extensions sont effectués lors de la lecture de la commande, avant son exécution.
La première version,, LANG=Ja_JP bash -c "echo $LANG"
est une commande unique. Une fois analysé en tant que tel, $LANG
est étendu à en_US
avant que quoi que ce soit ne soit exécuté. Une fois le bash
traitement de l'entrée terminé, il accélère un processus, ajoute LANG=Ja_JP
à l'environnement comme prévu, puis s'exécute bash -c echo en_US
.
Vous pouvez empêcher l'expansion avec des guillemets simples, c'est-à-dire des LANG=Ja_JP bash -c 'echo $LANG'
sorties Ja_JP
.
Notez que lorsque vous avez une affectation de variable dans le cadre d'une commande, l'affectation affecte uniquement l'environnement de cette commande et non celui de votre shell.
La deuxième version, LANG=Ja_JP; bash -c "echo $LANG"
est en fait deux commandes distinctes exécutées en séquence. La première est une simple affectation de variable sans commande, elle affecte donc votre shell actuel.
Ainsi, vos deux extraits sont fondamentalement différents malgré la distinction superficielle d'un seul ;
.
Complètement hors sujet, mais pourrais-je recommander d'ajouter un .UTF-8
lors du réglage LANG
. Il n'y a pas de bonne raison de ne pas utiliser Unicode au 21e siècle.