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

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

ใน Bash คุณสามารถสร้างอาร์เรย์เพื่อจัดเก็บชุดองค์ประกอบต่างๆ อาร์เรย์ Bash เป็นคอลเล็กชันหนึ่งมิติ ในภาษาการเขียนโปรแกรม เช่น C และ C++ อาร์เรย์คือชุดขององค์ประกอบของข้อมูลประเภทเดียวกัน อย่างไรก็ตาม ใน Bash คุณสามารถเก็บจำนวนเต็มและสตริงไว้ในอาร์เรย์เดียวกันได้ ทั้งนี้ขึ้นอยู่กับกรณีการใช้งาน

ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีประกาศอาร์เรย์ Bash และเข้าถึงองค์ประกอบต่างๆ จากนั้นคุณจะได้เรียนรู้วิธีวนซ้ำองค์ประกอบของอาร์เรย์และผนวกองค์ประกอบเข้ากับอาร์เรย์ สุดท้าย คุณจะได้เรียนรู้เกี่ยวกับอาร์เรย์ที่เชื่อมโยงใน Bash

เอาล่ะ!

⚙ สนใจร่วมเขียนโค้ดหรือไม่? นี่คือข้อกำหนดเบื้องต้น:

วิธีประกาศ 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=(24 27 18 30 15)

ตามที่กล่าวไว้ในไวยากรณ์ ตัวเลขในอาร์เรย์ราคาจะถูกคั่นด้วยช่องว่างซึ่งอยู่ในวงเล็บ โดยไม่มีช่องว่างก่อนและหลังตัวดำเนินการ =

  12 เครื่องมือตรวจสอบสังเคราะห์สำหรับธุรกิจออนไลน์ของคุณ

ใน Bash คุณสามารถใช้คำสั่ง echo เพื่อพิมพ์ค่าของตัวแปรได้ การใช้ $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[@]} ขยายไปยังองค์ประกอบทั้งหมดในอาร์เรย์ราคา และราคา ${[@]} ให้ค่าขององค์ประกอบทั้งหมดแก่เรา

Bash for loop คล้ายกับไวยากรณ์ for loop ของ Python แต่คำสั่งในเนื้อหาของลูปควรอยู่ใน do และ done ดังที่แสดง:

$ for price in ${prices[@]}
> do
> echo $price
> done

เนื่องจากเราใช้คำสั่ง echo และพิมพ์ค่าของราคาตัวแปรออกมา เราจึงได้ผลลัพธ์ดังต่อไปนี้:

# 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

อาร์เรย์ราคาประกอบด้วยองค์ประกอบ 5 รายการ ดังนั้นดัชนีจึงเริ่มต้นที่ 0 และขึ้นไปจนถึง 4

  ทำไมแป้นพิมพ์บนหน้าจอไม่ปรากฏบน iPad ของฉัน

ต่อไป เราสามารถวนซ้ำรายการดัชนีและเข้าถึงองค์ประกอบที่แต่ละดัชนี สำหรับดัชนี i ${prices[i]} เป็นองค์ประกอบที่ดัชนี i

$ for i in ${!prices[@]}
> do
> echo ${prices[i]}
> done

การวนซ้ำด้านบนจะพิมพ์องค์ประกอบทั้งหมดในอาร์เรย์

# output
24
27
18
30
15

💬 ที่นี่ หลังจากเข้าถึงแต่ละองค์ประกอบแล้ว เราจะดำเนินการง่ายๆ ในการพิมพ์ค่าออกมา โดยทั่วไป เราสามารถมีการประมวลผลที่ถูกต้องกับองค์ประกอบ

ผนวกองค์ประกอบเข้ากับ Bash Array

ในอาร์เรย์ราคา เรามีห้าองค์ประกอบ (ที่ดัชนี 0,1,2,3 และ 4) หากคุณต้องการเพิ่มองค์ประกอบต่อท้ายอาร์เรย์ที่ดัชนี 5 คุณสามารถทำได้ดังนี้:

$ prices[5]=21

เราเห็นว่ามีการต่อท้าย 21 ต่อท้ายอาร์เรย์ราคา

$ echo ${prices[@]}
24 27 18 30 15 21

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

คุณสามารถใช้ arrayName+=(elements(s)) เพื่อผนวกหนึ่งองค์ประกอบขึ้นไปในอาร์เรย์ ดังที่แสดง:

$ prices+=(10)

ตอนนี้ ถ้าเราพิมพ์อาร์เรย์ราคา เราจะเห็นว่ามี 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

หมายเหตุ: ลำดับขององค์ประกอบไม่เหมือนกับลำดับที่เราเพิ่มเข้าไป เนื่องจากไม่เหมือนกับอาร์เรย์ที่จัดทำดัชนี อาร์เรย์ที่เชื่อมโยงจะไม่เรียงลำดับคอลเล็กชัน แต่ทำงานเกี่ยวกับความสัมพันธ์ระหว่างคีย์และค่าต่างๆ ดังนั้นคีย์คืออาร์เรย์ที่เชื่อมโยงซึ่งดัชนีคืออาร์เรย์ดัชนี

  สุดยอด 8 หลักสูตรออนไลน์สำหรับการตลาดดิจิทัลเต็มรูปแบบ

คุณยังสามารถวนซ้ำอาร์เรย์ที่เชื่อมโยงและเข้าถึงคีย์ดังที่แสดง:

$ 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) หรือเรียกใช้การประกาศ -a arrayName และเพิ่มองค์ประกอบในอาร์เรย์
  • หากต้องการเข้าถึงองค์ประกอบ คุณสามารถวนซ้ำโดยใช้ ${arrayName[@]}. หรือคุณสามารถรับรายการดัชนีที่ถูกต้องทั้งหมดโดยใช้การขยายพารามิเตอร์ ${!arrayName[@]}.
  • สุดท้าย คุณยังได้เรียนรู้วิธีประกาศอาร์เรย์ที่เชื่อมโยงเพื่อจัดเก็บคู่คีย์-ค่าใน Bash

ต่อไป ดูบทช่วยสอนสำหรับลูปใน Bash

เรื่องล่าสุด

x