ตัวแปรและฟังก์ชั่นอยู่ในเนมสเปซที่แตกต่างกันในเส้นประและนี่ยังระบุโดยPOSIX :
การดำเนินการจะต้องรักษาพื้นที่ชื่อที่แยกต่างหากสำหรับฟังก์ชั่นและตัวแปร
นอกจากนั้นตัวแปรมีขอบเขตทั่วโลกตามค่าเริ่มต้น เชลล์บางตัว (เช่น bash, ksh และ zsh) จัดเตรียมlocal
คีย์เวิร์ดเพื่อประกาศตัวแปรในฟังก์ชันที่มีขอบเขตโลคัลเท่านั้น
ดังนั้นใช่พฤติกรรมที่คุณเห็นนั้นรับประกันโดย POSIX
POSIX ยังไม่ได้มาตรฐาน local
, ยัง :
คำอธิบายของฟังก์ชั่นในข้อเสนอแรกนั้นขึ้นอยู่กับความคิดที่ว่าฟังก์ชั่นควรทำงานเหมือนสคริปต์เชลล์ขนาดเล็ก นั่นคือยกเว้นตัวแปรที่ใช้ร่วมกันองค์ประกอบส่วนใหญ่ของสภาพแวดล้อมการดำเนินการควรทำตัวเหมือนเป็นสภาพแวดล้อมการดำเนินการใหม่ [.. ]
[.. ] ตัวแปรท้องถิ่นภายในฟังก์ชั่นได้รับการพิจารณาและรวมอยู่ในข้อเสนอก่อนหน้าอื่น (ควบคุมโดย built-in พิเศษlocal
) แต่ถูกลบออกเพราะพวกเขาไม่พอดีกับโมเดลที่พัฒนาขึ้นสำหรับฟังก์ชั่นอย่างง่ายและเพราะยังมีการคัดค้าน ในตัวพิเศษใหม่ที่ไม่ได้เป็นส่วนหนึ่งของการปฏิบัติทางประวัติศาสตร์ การใช้งานควรสำรองตัวบ่งชี้local
(รวมถึงtypeset
ที่ใช้ใน KornShell) ในกรณีที่มีการนำกลไกตัวแปรท้องถิ่นมาใช้ในเวอร์ชันอนาคตของมาตรฐานนี้
(เน้นที่เหมือง)
fn
ฟังก์ชันนั้นอยู่ในเนมสเปซแยกต่างหาก หากดำเนินการครั้งเดียวได้ลบล้างคำจำกัดความของเราจะเห็นพฤติกรรมเดียวกัน คุณควรแสดงให้เห็นว่าฟังก์ชั่นยังคงถูกกำหนดเช่นtype fn
หลังจากนั้น