คำแนะนำเกี่ยวกับ Bash Array
เผยแพร่แล้ว: 2022-12-30ในคำแนะนำเกี่ยวกับอาร์เรย์ Bash นี้ คุณจะได้เรียนรู้วิธีการประกาศและทำงานกับอาร์เรย์ที่จัดทำดัชนีและเชื่อมโยงใน Bash
ใน Bash คุณสามารถสร้างอาร์เรย์เพื่อจัดเก็บชุดองค์ประกอบต่างๆ อาร์เรย์ Bash เป็นคอลเล็กชัน หนึ่งมิติ ในภาษาการเขียนโปรแกรม เช่น C และ C++ อาร์เรย์คือชุดขององค์ประกอบของข้อมูลประเภทเดียวกัน อย่างไรก็ตาม ใน Bash คุณสามารถเก็บจำนวนเต็มและสตริงไว้ในอาร์เรย์เดียวกันได้ ทั้งนี้ขึ้นอยู่กับกรณีการใช้งาน
ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีประกาศอาร์เรย์ Bash และเข้าถึงองค์ประกอบต่างๆ จากนั้นคุณจะได้เรียนรู้วิธีวนซ้ำองค์ประกอบของอาร์เรย์และผนวกองค์ประกอบเข้ากับอาร์เรย์ สุดท้าย คุณจะได้เรียนรู้เกี่ยวกับอาร์เรย์ที่เชื่อมโยงใน Bash
เอาล่ะ!
สนใจร่วมเข้ารหัสหรือไม่? นี่คือข้อกำหนดเบื้องต้น:
- หากคุณใช้ Mac หรือ Linux คุณสามารถเปิดเทอร์มินัลและโค้ดได้
 - หากคุณใช้เครื่อง Windows โปรดติดตั้ง Git Bash หรือระบบย่อย Windows สำหรับ Linux (WSL2)
 
วิธีประกาศ Bash Array
ในส่วนนี้ คุณจะได้เรียนรู้ไวยากรณ์ในการประกาศอาร์เรย์ Bash และตัวอย่างโค้ด
ไวยากรณ์ของการประกาศ Bash Array
คุณสามารถประกาศอาร์เรย์ใน Bash โดยใช้ไวยากรณ์ต่อไปนี้:
 $ arrayName=(elt1 elt2 ... eltN) # arrayName is the name of the array # elt1 through eltN are the N elements in the array ในไวยากรณ์ข้างต้น arrayName หมายถึงชื่อของอาร์เรย์ที่มี N องค์ประกอบ elt1...eltN
 องค์ประกอบของอาร์เรย์จะอยู่ระหว่างวงเล็บเปิดและปิด () นอกจากนี้ โปรดสังเกตว่าองค์ประกอบของอาร์เรย์ถูกคั่นด้วย ช่องว่าง เช่นเดียวกับตัวแปร Bash ใดๆ ไม่ ควรมีช่องว่างก่อนหรือหลังตัวดำเนินการกำหนด =
ในภาษาการเขียนโปรแกรมอื่นๆ ส่วนใหญ่ คุณจะแยกองค์ประกอบของอาร์เรย์หรือคอลเล็กชันที่คล้ายกันด้วยเครื่องหมายจุลภาค แต่ใน Bash ช่องว่างเป็นตัวคั่น
ใน Bash อาร์เรย์ดังกล่าวซึ่งองค์ประกอบถูกระบุโดยดัชนีจะเรียกว่า อาร์เรย์ ที่จัดทำดัชนี
การประกาศอาร์เรย์ที่จัดทำดัชนีใน Bash
 มาสร้าง prices กันเถอะ อาร์เรย์ของตัวเลข
 $ prices=(24 27 18 30 15)ตามที่กล่าวไว้ในไวยากรณ์ ตัวเลขในอาร์เรย์
pricesจะถูกคั่นด้วยช่องว่างซึ่งอยู่ในวงเล็บ โดยไม่มีช่องว่างก่อนและหลังตัวดำเนินการ =
 ใน Bash คุณสามารถใช้คำสั่ง echo เพื่อพิมพ์ค่าของตัวแปรได้ การใช้ $variableName พิมพ์ค่าของ variableName ชื่อ อย่างไรก็ตาม คุณจะเห็นว่าการใช้ชื่ออาร์เรย์จะพิมพ์เฉพาะองค์ประกอบแรกเท่านั้น
 $ echo $prices 24อาร์เรย์ Bash ติดตามการจัดทำดัชนีเป็นศูนย์ องค์ประกอบแรกอยู่ที่ดัชนี 0 องค์ประกอบที่สองอยู่ที่ดัชนี 1 ไปเรื่อยๆ คุณยังสามารถใช้การจัดทำดัชนีเชิงลบ ดัชนีขององค์ประกอบอาร์เรย์สุดท้ายคือ -1
จะเกิดอะไรขึ้นหากคุณพยายามเข้าถึงองค์ประกอบที่ดัชนีเฉพาะและพิมพ์ออกมา ลองพิมพ์องค์ประกอบที่ดัชนี 1
 $ echo $prices[1] 24[1] เหตุใดเอาต์พุตจึงเป็น 24[1] นี่เป็นเพราะ Bash แทนที่ $prices ด้วย 24 องค์ประกอบแรกในอาร์เรย์และ [1] จะถูกพิมพ์ออกมาเช่นนี้
 หากต้องการพิมพ์องค์ประกอบที่ดัชนีเฉพาะ คุณสามารถใช้การขยายพารามิเตอร์ของแบบฟอร์ม ${prices[index]}
 $ echo ${prices[1]} # 27 $ echo ${prices[2]} # 18 หากต้องการพิมพ์องค์ประกอบทั้งหมดในอาร์เรย์ คุณสามารถระบุ @ แทนดัชนีเฉพาะได้
 $ echo ${prices[@]} 24 27 18 30 15ต่อไปมาสร้างอาร์เรย์ของสตริงกัน การรันคำสั่งต่อไปนี้จะสร้างอาร์เรย์ที่มีดัชนี:
 $ declare -a fruits ตัวเลือก -a สร้างอาร์เรย์ที่มีดัชนี ตอนนี้คุณสามารถเติมอาร์เรย์ทีละองค์ประกอบโดยการประกาศองค์ประกอบที่ดัชนีที่ระบุดังที่แสดงด้านล่าง:
 $ fruits[0]="cherry" $ fruits[1]="berry" $ fruits[2]="apple" $ fruits[3]="pear" $ fruits[4]="melon" $ fruits[5]="orange" ตอนนี้ หากต้องการพิมพ์องค์ประกอบทั้งหมดของอาร์เรย์ คุณสามารถใช้ ${fruits[@]}
 $ echo ${fruits[@]} cherry berry apple pear melon orangeเข้าถึงองค์ประกอบของ Bash Array

คุณสามารถเข้าถึงองค์ประกอบของอาร์เรย์ด้วยวิธีต่อไปนี้:
- วนซ้ำอาร์เรย์และเข้าถึงองค์ประกอบโดยตรง
 - วนซ้ำชุดของดัชนีและเข้าถึงองค์ประกอบที่ดัชนีเฉพาะ
 
วนซ้ำองค์ประกอบอาร์เรย์และการเข้าถึง
หากคุณเขียนโค้ดด้วย Python คุณจะใช้ for loop โดยใช้ไวยากรณ์ต่อไปนี้:
 for elt in some_list: print(elt)ตอนนี้ให้เราเขียน Bash ที่เทียบเท่ากับลูปด้านบน
 เราทราบดีว่า {prices[@]} ขยายไปยังองค์ประกอบทั้งหมดในอาร์เรย์ prices และ ${prices[@]} ให้ค่าขององค์ประกอบทั้งหมดแก่เรา
 Bash for loop คล้ายกับไวยากรณ์ for loop ของ Python แต่คำสั่งในเนื้อหาของลูปควรอยู่ใน do และ done ดังที่แสดง:
 $ for price in ${prices[@]} > do > echo $price > done เนื่องจากเราใช้คำสั่ง echo และพิมพ์ค่าของ price ตัวแปร เราจึงได้ผลลัพธ์ต่อไปนี้:
 # output 24 27 18 30 15เข้าถึงองค์ประกอบโดยใช้ดัชนีอาร์เรย์
 อีกวิธีหนึ่งในการวนซ้ำอาร์เรย์คือการใช้ดัชนีขององค์ประกอบ สิ่งนี้คล้ายกับการสร้าง for loop ใน Python โดยใช้ฟังก์ชัน range() :

 for i in range(len(some_list)): print(i) ในการรับรายการดัชนีที่จะวนซ้ำ คุณสามารถวางเครื่องหมายอัศเจรีย์ ( ! ) ก่อนชื่ออาร์เรย์ในการขยายพารามิเตอร์ นี่จะแสดงรายการดัชนีที่ถูกต้อง ทั้งหมด สำหรับอาร์เรย์ดังที่แสดง:
 $ echo ${!prices[@]} 0 1 2 3 4 อาร์เรย์ prices ประกอบด้วยองค์ประกอบ 5 รายการ ดังนั้นดัชนีจึงเริ่มต้นที่ 0 และขึ้นไปจนถึง 4
 ต่อไป เราสามารถวนซ้ำรายการดัชนีและเข้าถึงองค์ประกอบที่แต่ละดัชนี สำหรับดัชนี i ${prices[i]} เป็นองค์ประกอบที่ดัชนี i
 $ for i in ${!prices[@]} > do > echo ${prices[i]} > doneการวนซ้ำด้านบนจะพิมพ์องค์ประกอบทั้งหมดในอาร์เรย์
 # output 24 27 18 30 15ที่นี่ หลังจากเข้าถึงแต่ละองค์ประกอบแล้ว เราจะดำเนินการง่ายๆ ในการพิมพ์ค่าออกมา โดยทั่วไป เราสามารถมีการประมวลผลที่ถูกต้องกับองค์ประกอบ
ผนวกองค์ประกอบเข้ากับ Bash Array

 ในอาร์เรย์ prices เรามีห้าองค์ประกอบ (ที่ดัชนี 0,1,2,3 และ 4) หากคุณต้องการเพิ่มองค์ประกอบต่อท้ายอาร์เรย์ที่ดัชนี 5 คุณสามารถทำได้ดังนี้:
 $ prices[5]=21เราเห็นว่ามีการต่อท้าย 21 ต่อท้ายอาร์เรย์ราคา
 $ echo ${prices[@]} 24 27 18 30 15 21อย่างไรก็ตาม จะสะดวกกว่าที่จะต่อท้ายอาร์เรย์โดยไม่ต้องจำดัชนีขององค์ประกอบที่เพิ่มล่าสุดหรือจำนวนองค์ประกอบที่อยู่ในอาร์เรย์
 คุณสามารถใช้ arrayName+=(elements(s)) เพื่อผนวกหนึ่งองค์ประกอบขึ้นไปในอาร์เรย์ ดังที่แสดง:
 $ prices+=(10) ตอนนี้ ถ้าเราพิมพ์อาร์เรย์ prices เราจะเห็นว่ามี 10 ต่อท้ายอาร์เรย์
 $ echo ${prices[@]} 24 27 18 30 15 21 10ต่อไป เรามาเรียนรู้วิธีการประกาศอาร์เรย์ที่เชื่อมโยงใน Bash
อาร์เรย์ที่เชื่อมโยงใน Bash
 หากคุณต้องการกำหนดความสัมพันธ์ในรูปของคู่คีย์-ค่า คุณสามารถใช้ อาร์เรย์ที่เชื่อมโยง ได้ คุณสามารถประกาศอาร์เรย์ที่เชื่อมโยงได้โดยใช้ไวยากรณ์ทั่วไปต่อไปนี้ ขอให้สังเกตว่าเราใช้ตัวเลือก -A แทน -a
 $ declare -A fruits_pricesคุณสามารถเพิ่มองค์ประกอบในอาร์เรย์ที่เชื่อมโยงได้โดยการระบุคีย์และค่าที่เกี่ยวข้อง ที่นี่ เราได้เพิ่มชื่อของผลไม้เป็นคีย์และตัวเลขจากอาร์เรย์ราคาเป็นค่า
 $ fruits_prices[cherry]=24 $ fruits_prices[berry]=27 $ fruits_prices[apple]=18 $ fruits_prices[pear]=30 $ fruits_prices[melon]=15 $ fruits_prices[orange]=21แล้วเราจะเข้าถึงองค์ประกอบในอาร์เรย์ที่เชื่อมโยงได้อย่างไร
วิธีที่คุณค้นหาค่าโดยใช้คีย์ที่เกี่ยวข้องในพจนานุกรม Python คุณจะสามารถเข้าถึงค่าในอาร์เรย์ที่เชื่อมโยงได้โดยใช้คีย์
 $ echo ${fruits_prices[berry]} # 27 เราเห็นว่า ${fruits_prices[@]} ขยายไปที่ค่า และ ${!fruits_prices[@]} ขยายไปที่คีย์
 $ echo ${fruits_prices[@]} # Output: 18 27 21 24 30 15 $ echo ${!fruits_prices[@]} # Output: apple berry orange cherry pear melonหมายเหตุ : ลำดับขององค์ประกอบไม่เหมือนกับลำดับที่เราเพิ่มเข้าไป เนื่องจากไม่เหมือนกับอาร์เรย์ที่จัดทำดัชนี อาร์เรย์ที่เชื่อมโยงจะไม่เรียงลำดับคอลเล็กชัน แต่ทำงานเกี่ยวกับความสัมพันธ์ระหว่างคีย์และค่าต่างๆ ดังนั้นคีย์คืออาร์เรย์ที่เชื่อมโยงซึ่งดัชนีคืออาร์เรย์ที่จัดทำดัชนี
คุณยังสามารถวนซ้ำอาร์เรย์ที่เชื่อมโยงและเข้าถึงคีย์ดังที่แสดง:
 $ for key in ${!fruits_prices[@]} > do > echo $key > done # Output apple berry orange cherry pear melonลูปต่อไปนี้แสดงวิธีการเข้าถึงค่าต่างๆ
 $ for value in ${fruits_prices[@]} > do > echo $value > done # Output 18 27 21 24 30 15 แม้ว่าจะแนะนำให้ใช้ arrayName[key]=value แต่คุณสามารถประกาศเป็นลำดับดังนี้:
 declare -A arrayName arrayName=(key1 value1 key2 value2 ... keyN valueN)ด้วยวิธีนี้ Bash จะสรุปองค์ประกอบแรกเป็นคีย์แรก องค์ประกอบที่สองเป็นค่าแรก และอื่นๆ
สรุป
ฉันหวังว่าคุณจะเข้าใจวิธีสร้างและทำงานกับอาร์เรย์ Bash แล้ว นี่คือการทบทวนอย่างรวดเร็วเกี่ยวกับสิ่งที่คุณได้เรียนรู้
-  คุณสามารถประกาศอาร์เรย์ที่จัดทำดัชนีใน Bash โดยใช้ไวยากรณ์ 
arrayName=(elt1 elt2 elt3 ... eltN)หรือเรียกใช้การdeclare -a arrayNameและเพิ่มองค์ประกอบในอาร์เรย์ -  หากต้องการเข้าถึงองค์ประกอบ คุณสามารถวนซ้ำโดยใช้ 
${arrayName[@]}หรือคุณสามารถรับรายการดัชนีที่ถูกต้องทั้งหมดโดยใช้การขยายพารามิเตอร์${!arrayName[@]} - สุดท้าย คุณยังได้เรียนรู้วิธีประกาศอาร์เรย์ที่เชื่อมโยงเพื่อจัดเก็บคู่คีย์-ค่าใน Bash
 
ต่อไป ดูบทช่วยสอนสำหรับลูปใน Bash
