Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เชี่ยวชาญตัวแปรอาร์เรย์ใน Bash: การใช้งาน ตัวอย่าง และแนวทางปฏิบัติที่ดีที่สุด

เราเคยพูดถึงการใช้ตัวแปรใน 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]

การวนลูปอาร์เรย์

สิ่งที่คุณจะทำกับอาร์เรย์บ่อยที่สุดคือวนลูปผ่านมันเพื่อดำเนินการกับแต่ละสมาชิก เราได้ครอบคลุมเรื่องนี้ไว้แล้วในบทความอื่น