<ก่อนหน้านี้ | เนื้อหา | ถัดไป>
ตัวแปรท้องถิ่น
ในสคริปต์ที่เราเขียน ตัวแปรทั้งหมด (รวมถึงค่าคงที่) เป็น ตัวแปรส่วนกลาง. ตัวแปรทั่วโลกยังคงดำรงอยู่ตลอดโปรแกรม นี่เป็นเรื่องปกติสำหรับหลาย ๆ อย่าง แต่บางครั้งอาจทำให้การใช้ฟังก์ชันเชลล์ซับซ้อนขึ้น ฟังก์ชันภายในเปลือกมักเป็นที่พึงปรารถนาที่จะมี ตัวแปรท้องถิ่น. ตัวแปรโลคัลสามารถเข้าถึงได้เฉพาะภายในฟังก์ชันเชลล์ที่มีการกำหนดและหยุดทำงานเมื่อฟังก์ชันเชลล์สิ้นสุดลง
การมีตัวแปรโลคัลทำให้โปรแกรมเมอร์ใช้ตัวแปรที่มีชื่อที่อาจมีอยู่แล้ว ทั้งในสคริปต์ทั่วโลกหรือในฟังก์ชันเชลล์อื่นๆ โดยไม่ต้องกังวลเกี่ยวกับความขัดแย้งของชื่อที่อาจเกิดขึ้น
นี่คือตัวอย่างสคริปต์ที่แสดงให้เห็นว่าตัวแปรโลคัลถูกกำหนดและใช้งานอย่างไร:
#! / bin / ทุบตี
# local-vars: สคริปต์เพื่อแสดงตัวแปรท้องถิ่น
#! / bin / ทุบตี
# local-vars: สคริปต์เพื่อแสดงตัวแปรท้องถิ่น
ฟู=0
# ตัวแปรโกลบอล foo
ฟู=0
function_1 () {
local foo # ตัวแปร foo local เพื่อ funct_1 foo=1
echo "funct_1: foo = $foo"
}
function_2 () {
local foo # ตัวแปร foo local เพื่อ funct_2 foo=2
echo "funct_2: foo = $foo"
}
echo "global: foo = $foo" funct_1
function_1 () {
local foo # ตัวแปร foo local เพื่อ funct_1 foo=1
echo "funct_1: foo = $foo"
}
function_2 () {
local foo # ตัวแปร foo local เพื่อ funct_2 foo=2
echo "funct_2: foo = $foo"
}
echo "global: foo = $foo" funct_1
ตัวแปรท้องถิ่น
echo "global: foo = $foo" funct_2
echo "global: foo = $foo"
echo "global: foo = $foo" funct_2
echo "global: foo = $foo"
ดังที่เราเห็น ตัวแปรท้องถิ่นถูกกำหนดโดยนำหน้าชื่อตัวแปรด้วยคำว่า ในประเทศ. สิ่งนี้สร้างตัวแปรที่อยู่ภายในฟังก์ชันเชลล์ที่กำหนดไว้ เมื่ออยู่นอกฟังก์ชันเชลล์ ตัวแปรจะไม่มีอยู่อีกต่อไป เมื่อเราเรียกใช้สคริปต์นี้ เราจะเห็นผลลัพธ์:
[me@linuxbox ~]$ vars ท้องถิ่น
ทั่วโลก: foo = 0 funct_1: foo = 1 ทั่วโลก: foo = 0 funct_2: foo = 2 ทั่วโลก: foo = 0
[me@linuxbox ~]$ vars ท้องถิ่น
ทั่วโลก: foo = 0 funct_1: foo = 1 ทั่วโลก: foo = 0 funct_2: foo = 2 ทั่วโลก: foo = 0
เราจะเห็นว่าการกำหนดค่าให้กับตัวแปรท้องถิ่น foo ภายในฟังก์ชันของเชลล์ทั้งสองไม่มีผลกับค่าของ foo กำหนดไว้นอกฟังก์ชัน
คุณลักษณะนี้ช่วยให้สามารถเขียนฟังก์ชันของเชลล์เพื่อให้ฟังก์ชันต่างๆ เป็นอิสระจากกันและจากสคริปต์ที่ปรากฏ สิ่งนี้มีค่ามาก เนื่องจากช่วยป้องกันไม่ให้ส่วนใดส่วนหนึ่งของโปรแกรมรบกวนส่วนอื่น นอกจากนี้ยังอนุญาตให้เขียนฟังก์ชันเชลล์เพื่อให้สามารถพกพาได้ กล่าวคือสามารถตัดและวางจากสคริปต์หนึ่งไปยังอีกสคริปต์หนึ่งได้ตามต้องการ