พารามิเตอร์และการขยายประเภทอื่น ๆ จะดำเนินการเมื่อคำสั่งถูกอ่านก่อนที่จะถูกดำเนินการ
รุ่นแรกLANG=Ja_JP bash -c "echo $LANG", เป็นคำสั่งเดียว หลังจากถูกวิเคราะห์คำเช่น$LANGนี้ให้ขยายเป็นen_USก่อนที่จะมีการดำเนินการใด ๆ เมื่อbashเสร็จสิ้นการประมวลผลอินพุตส้อมกระบวนการเพิ่มต่อสิ่งแวดล้อมตามที่คาดไว้แล้วรันLANG=Ja_JPbash -c echo en_US
คุณสามารถป้องกันการขยายตัวที่มีราคาเดียวคือเอาท์พุทLANG=Ja_JP bash -c 'echo $LANG'Ja_JP
โปรดทราบว่าเมื่อคุณมีการกำหนดตัวแปรเป็นส่วนหนึ่งของคำสั่งการมอบหมายจะมีผลกับสภาพแวดล้อมของคำสั่งนั้นเท่านั้นและไม่ใช่ของเชลล์
รุ่นที่สองLANG=Ja_JP; bash -c "echo $LANG"เป็นจริงสองคำสั่งแยกดำเนินการตามลำดับ สิ่งแรกคือการกำหนดตัวแปรแบบง่ายโดยไม่มีคำสั่งดังนั้นมันจะมีผลกับเชลล์ปัจจุบันของคุณ
ดังนั้นทั้งสองตัวอย่างของคุณมีพื้นฐานที่แตกต่างแม้จะมีความแตกต่างตื้น ๆ ;ของซิงเกิ้ล
ปิดหัวข้อทั้งหมด แต่ฉันขอแนะนำให้ผนวกการ.UTF-8ตั้งค่าเมื่อLANGใด ปัจจุบันไม่มีเหตุผลที่ดีที่จะไม่ใช้ Unicode ในศตวรรษที่ 21