LANG
bashの更新と見なされるためにセミコロンが必要な理由を説明できる人はいますか?
動作しません:
> LANG=Ja_JP bash -c "echo $LANG"
en_US
働く:
> LANG=Ja_JP ; bash -c "echo $LANG"
Ja_JP
私はLinuxでbash 4.1.10を使用し、cygwinでは同じバージョンを使用しています。
ベストアンサー1
コマンドを読み取るときにパラメータや他の種類の拡張、今後実行されました。
最初のバージョンLANG=Ja_JP bash -c "echo $LANG"
は単一のコマンドです。そのように解析された後は、実行される前に$LANG
拡張されます。入力が処理されen_US
たら、プロセスを分岐して期待どおりに環境に追加してから実行します。bash
LANG=Ja_JP
bash -c echo en_US
LANG=Ja_JP bash -c 'echo $LANG'
拡張を防ぐために、単一引用符(出力など)を使用できますJa_JP
。
コマンドの一部として変数を割り当てると、割り当てはシェル環境ではなくコマンド環境にのみ影響します。
2番目のバージョンは、LANG=Ja_JP; bash -c "echo $LANG"
実際に順番に実行される2つの別々のコマンドです。最初はコマンドなしの単純な変数割り当てなので、現在のシェルに影響します。
したがって、シングル;
。
完全に話題から抜け出しましたが、.UTF-8
最近LANG
21世紀にはUnicodeを使わない理由はありません。