環境変数とコマンドの間にセミコロンを使用する必要がある場合

環境変数とコマンドの間にセミコロンを使用する必要がある場合

LANGbashの更新と見なされるためにセミコロンが必要な理由を説明できる人はいますか?

動作しません:

> 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たら、プロセスを分岐して期待どおりに環境に追加してから実行します。bashLANG=Ja_JPbash -c echo en_US

LANG=Ja_JP bash -c 'echo $LANG'拡張を防ぐために、単一引用符(出力など)を使用できますJa_JP

コマンドの一部として変数を割り当てると、割り当てはシェル環境ではなくコマンド環境にのみ影響します。

2番目のバージョンは、LANG=Ja_JP; bash -c "echo $LANG"実際に順番に実行される2つの別々のコマンドです。最初はコマンドなしの単純な変数割り当てなので、現在のシェルに影響します。

したがって、シングル;

完全に話題から抜け出しましたが、.UTF-8最近LANG21世紀にはUnicodeを使わない理由はありません。

おすすめ記事