Parameter dan jenis ekspansi lainnya dilakukan ketika perintah dibaca, sebelum dieksekusi.
Versi pertama LANG=Ja_JP bash -c "echo $LANG"
,, adalah satu perintah. Setelah diuraikan seperti itu, $LANG
diperluas ke en_US
sebelum sesuatu dieksekusi. Setelah bash
selesai memproses input, maka akan melakukan proses, menambah LANG=Ja_JP
lingkungan seperti yang diharapkan, dan kemudian mengeksekusi bash -c echo en_US
.
Anda dapat mencegah ekspansi dengan tanda kutip tunggal, yaitu LANG=Ja_JP bash -c 'echo $LANG'
keluaran Ja_JP
.
Perhatikan bahwa ketika Anda memiliki tugas variabel sebagai bagian dari perintah, tugas tersebut hanya mempengaruhi lingkungan perintah itu dan bukan lingkungan shell Anda.
Versi kedua, LANG=Ja_JP; bash -c "echo $LANG"
sebenarnya adalah dua perintah terpisah yang dijalankan secara berurutan. Yang pertama adalah penugasan variabel sederhana tanpa perintah, sehingga memengaruhi shell Anda saat ini.
Dengan demikian, kedua cuplikan Anda pada dasarnya berbeda meskipun ada perbedaan dangkal dari satu ;
.
Benar-benar di luar topik, tetapi mungkin saya sarankan menambahkan .UTF-8
pengaturan saat LANG
. Tidak ada alasan bagus saat ini untuk tidak menggunakan Unicode di abad ke-21.