เราเคยพูดถึงการใช้ตัวแปรใน Bash ไปแล้ว – บทความนี้จะอธิบายเกี่ยวกับตัวแปร อาร์เรย์ (array) ใน Bash และให้ตัวอย่างการใช้งาน
อาร์เรย์คืออะไร
อาร์เรย์เป็นชนิดของตัวแปรที่สามารถเก็บค่าได้หลายค่า มันคือรายการของค่าที่คุณสามารถวนลูปผ่านและดำเนินการกับแต่ละค่าได้แยกต่างหาก
เช่น คุณอาจต้องการดำเนินการกับรายการไฟล์ โดยเก็บรายการนั้นเป็นอาร์เรย์ คุณจึงสามารถวนลูปผ่านชื่อไฟล์ในอาร์เรย์และดำเนินการกับแต่ละไฟล์
อาร์เรย์มีดัชนี (indexed) ตำแหน่งของแต่ละรายการในอาร์เรย์จะถูกแทนด้วยตัวเลขเริ่มต้นที่ 0
อาร์เรย์ใน Bash ไม่จำเป็นต้องมีดัชนีที่ ติดกัน (contiguously) – หรืออยู่ติดกันโดยไม่มีช่องว่าง – คุณสามารถมีค่าที่ตำแหน่ง 0, 3, 17 โดยไม่มีค่าระหว่างกันก็ได้
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับอาร์เรย์ Bash ได้ที่ Linux Documentation Project
การสร้างอาร์เรย์ Bash
อาร์เรย์ Bash สามารถเก็บตัวแปร Bash ทุกประเภทได้ – เส้นทาง (paths), สตริง, ตัวเลข – แม้แต่อาร์เรย์อื่นๆ
ทำไมควรห่อหุ้มเส้นทางไฟล์ในสตริงในสคริปต์ Shell ของคุณ
มีหลายวิธีในการประกาศอาร์เรย์ อธิบายด้านล่างนี้
การประกาศแบบอ้อม (Indirect Declaration)
อาร์เรย์สามารถประกาศแบบอ้อมได้โดยการกำหนดค่าให้กับสมาชิกของอาร์เรย์ – อาร์เรย์จะถูกสร้างขึ้นพร้อมกับสมาชิกที่มีค่าที่กำหนด
ARRAYNAME[INDEX]=VALUE
ตัวอย่าง:
#!/bin/bash peopleArray[3]="Tom"
อาร์เรย์ peopleArray จะถูกสร้างขึ้นอัตโนมัติ (แบบอ้อม) เมื่อมีการกำหนดค่าให้กับสมาชิกในอาร์เรย์ – ในกรณีนี้ ค่า "Tom" ถูกกำหนดให้กับดัชนี 3 ใน peopleArray ที่เพิ่งสร้างขึ้น
การประกาศโดยตรง (Direct Declaration)
คำสั่ง declare ยังสามารถใช้เพื่อกำหนดอาร์เรย์ได้:
declare -a ARRAYNAME
ตัวอย่าง:
declare -a peopleArray
สิ่งนี้จะสร้างอาร์เรย์ว่างชื่อ peopleArray
การสร้างผ่าน Compound Assignment
นี่คือวิธีที่คุณน่าจะใช้บ่อยที่สุด สร้างอาร์เรย์พร้อมกำหนดค่าให้ตั้งแต่แรก
ARRAYNAME=(value1 value2 ...)
สิ่งนี้กำหนดค่าของอาร์เรย์ให้กับชื่อตัวแปร ค่าของอาร์เรย์อยู่ใน () (วงเล็บทั่วไป) และคั่นด้วยช่องว่าง ค่าที่มีช่องว่างควรอยู่ในเครื่องหมายคำพูด
ตัวอย่าง:
peopleArray=("Tom", "Bill", "Theodore Baker Sr.")
การกำหนดค่าให้กับอาร์เรย์
เพิ่มค่าใหม่ไปที่ท้ายอาร์เรย์
เพื่อเพิ่มค่าให้กับอาร์เรย์ ให้กำหนดค่าโดยไม่ระบุดัชนี:
ARRAYNAME[]=VALUE
ตัวอย่าง:
peopleArray[]="Tony"
แทนที่ค่าในอาร์เรย์
เพื่อแทนที่ค่า ให้เขียนทับค่าที่ดัชนีปัจจุบันของค่านั้น
ตัวอย่าง หากคุณมีอาร์เรย์ที่มีค่าที่ดัชนี 7 และต้องการแทนที่:
peopleArray[7]="Tony"
การลบค่าในอาร์เรย์
ลบค่าจากอาร์เรย์โดยใช้คำสั่ง unset และระบุดัชนีของอาร์เรย์:
unset ARRAYNAME[INDEX]
ตัวอย่าง:
unset peopleArray[1]
…จะลบค่าลำดับที่สองในอาร์เรย์ peopleArray
การเข้าถึงค่าในอาร์เรย์
เพื่อเข้าถึงค่าในอาร์เรย์ คุณต้องใช้ เครื่องหมายปีกกา (curly braces) – มิฉะนั้น Bash จะไม่ตีความวงเล็บที่มีดัชนีอาร์เรย์ได้อย่างถูกต้อง:
echo ${ARRAYNAME[INDEX]}
ตัวอย่าง:
#!/bin/bash
peopleArray=("Tom", "Bill", "Theodore Baker Sr.")
echo ${peopleArray[0]}
…จะแสดงผล:
Tom
ในขณะที่ถ้าบรรทัดสุดท้ายเป็น:
echo $peopleArray[0]
การวนลูปอาร์เรย์
สิ่งที่คุณจะทำกับอาร์เรย์บ่อยที่สุดคือวนลูปผ่านมันเพื่อดำเนินการกับแต่ละสมาชิก เราได้ครอบคลุมเรื่องนี้ไว้แล้วในบทความอื่น