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