คำแนะนำเกี่ยวกับ 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

คำแนะนำเกี่ยวกับ Bash-Arrays

ในอาร์เรย์ 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