Parameter und andere Arten von Erweiterungen werden ausgeführt, wenn der Befehl gelesen wird, bevor er ausgeführt wird.
Die erste Version LANG=Ja_JP bash -c "echo $LANG"
ist ein einzelner Befehl. Nachdem es als solches analysiert wurde, $LANG
wird es erweitert, en_US
bevor etwas ausgeführt wird. Sobald bash
die Verarbeitung der Eingabe abgeschlossen ist, wird ein Prozess abgefragt LANG=Ja_JP
, der Umgebung wie erwartet hinzugefügt und anschließend ausgeführt bash -c echo en_US
.
Sie können die Erweiterung mit einfachen Anführungszeichen, dh LANG=Ja_JP bash -c 'echo $LANG'
Ausgaben, verhindern Ja_JP
.
Beachten Sie, dass sich die Zuweisung nur auf die Umgebung dieses Befehls und nicht auf die Umgebung Ihrer Shell auswirkt, wenn Sie eine Variablenzuweisung als Teil eines Befehls haben.
Die zweite Version LANG=Ja_JP; bash -c "echo $LANG"
besteht eigentlich aus zwei separaten Befehlen, die nacheinander ausgeführt werden. Die erste ist eine einfache Variablenzuweisung ohne Befehl. Sie wirkt sich also auf Ihre aktuelle Shell aus.
Daher unterscheiden sich Ihre beiden Ausschnitte trotz der oberflächlichen Unterscheidung eines einzelnen grundlegend ;
.
Völlig themenfremd, aber möglicherweise empfehle ich, .UTF-8
beim Einstellen ein anzuhängen LANG
. Es gibt heutzutage keinen guten Grund, Unicode im 21. Jahrhundert nicht zu verwenden.