Arrays ใน Bash

Bash Scripting เบื้องต้น

Alex Scriven

Data Scientist

Array คืออะไร?

Array ใน Bash มี 2 ประเภท:

  • Array
    • โครงสร้างที่ใช้ดัชนีตัวเลข (Numerical-indexed)
    • เรียกว่า 'list' ใน Python หรือ 'vector' ใน R

ใน Python: my_list = [1,3,2,4]

ใน R: my_vector <- c(1,3,2,4)

Bash Scripting เบื้องต้น

การสร้าง Array ใน Bash

การสร้าง Array แบบ Numerical-indexed ใน Bash ทำได้ 2 วิธี

1. ประกาศโดยยังไม่เพิ่มสมาชิก

declare -a my_first_array

2. สร้างและเพิ่มสมาชิกพร้อมกัน

my_first_array=(1 2 3)

จำไว้ — ห้ามมีเว้นวรรครอบเครื่องหมายเท่ากับ!

Bash Scripting เบื้องต้น

ระวังเรื่องเครื่องหมายจุลภาค!

ใน Bash ไม่ใช้เครื่องหมายจุลภาค (,) คั่นสมาชิกของ Array:

แบบนี้ ไม่ถูกต้อง:

my_first_array=(1, 2, 3)

แบบนี้ ถูกต้อง:

my_first_array=(1 2 3)
Bash Scripting เบื้องต้น

Property สำคัญของ Array

  • ดึงสมาชิกทั้งหมดของ Array ด้วย array[@] โดย Bash กำหนดให้ใส่วงเล็บปีกการอบชื่อ Array เมื่อต้องการเข้าถึง Property เหล่านี้
my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
  • ดูความยาวของ Array ด้วย #array[@]
echo ${#my_array[@]}
4
Bash Scripting เบื้องต้น

การจัดการสมาชิกของ Array

เข้าถึงสมาชิกของ Array ด้วยวงเล็บเหลี่ยม

my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
  • จำไว้ว่า Bash ใช้ Zero-indexing เหมือน Python (ต่างจาก R!)
Bash Scripting เบื้องต้น

การจัดการสมาชิกของ Array

กำหนดค่าสมาชิกของ Array ด้วย Index Notation

my_first_array=(15 20 300 42 23 2 4 33 54 67 66)

my_first_array[0]=999
echo ${my_first_array[0]}
999
  • จำไว้ว่าอย่าใช้ $ ตอนเขียนทับ Index เช่น $my_first_array[0]=999 เพราะจะใช้งานไม่ได้
Bash Scripting เบื้องต้น

การจัดการสมาชิกของ Array

ใช้ Notation array[@]:N:M เพื่อ 'Slice' ข้อมูลบางส่วนจาก Array

  • โดย N คือ Index เริ่มต้น และ M คือจำนวนสมาชิกที่ต้องการดึง
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)
echo ${my_first_array[@]:3:2}
42 23
Bash Scripting เบื้องต้น

การเพิ่มสมาชิกต่อท้าย Array

เพิ่มสมาชิกต่อท้าย Array ด้วย array+=(elements)

ตัวอย่าง:

my_array=(300 42 23 2 4 33 54 67 66)

my_array+=(10) echo ${my_array[@]}
300 42 23 2 4 33 54 67 66 10
Bash Scripting เบื้องต้น

การเพิ่มสมาชิกต่อท้าย Array (แบบผิด)

จะเกิดอะไรขึ้นถ้าไม่ใส่วงเล็บรอบค่าที่ต้องการเพิ่ม? มาดูกัน

ตัวอย่าง:

my_array=(300 42 23 2 4 33 54 67 66)
my_array+=10
echo ${my_array[@]}
30010 42 23 2 4 33 54 67 66

สตริง 10 จะถูกต่อเข้ากับสมาชิกตัวแรกแทน ซึ่งไม่ใช่ผลลัพธ์ที่ต้องการ!

Bash Scripting เบื้องต้น

Associative Arrays

  • Associative Array
    • คล้าย Array ทั่วไป แต่ใช้คู่ Key-Value แทนดัชนีตัวเลข
    • คล้าย Dictionary ใน Python หรือ List ใน R
    • หมายเหตุ: ใช้ได้ใน Bash 4 ขึ้นไปเท่านั้น Mac บางรุ่นอาจใช้ Bash เวอร์ชันเก่า ตรวจสอบด้วย bash --version ใน Terminal

ใน Python:

my_dict = {'city_name': "New York", 'population': 14000000}

ใน R:

my_list = list(city_name = c('New York'), population = c(14000000))
Bash Scripting เบื้องต้น

การสร้าง Associative Array

Associative Array สร้างได้ด้วย Syntax declare เท่านั้น (ใช้ -A ตัวพิมพ์ใหญ่)

จะประกาศก่อนแล้วค่อยเพิ่มสมาชิก หรือทำในบรรทัดเดียวก็ได้

  • ใส่ 'Key' ในวงเล็บเหลี่ยม แล้วกำหนดค่าหลังเครื่องหมายเท่ากับ
    • สามารถเพิ่มหลายสมาชิกพร้อมกันได้
Bash Scripting เบื้องต้น

ตัวอย่าง Associative Array

มาสร้าง Associative Array กัน:

declare -A city_details # Declare first

city_details=([city_name]="New York" [population]=14000000) # Add elements
echo ${city_details[city_name]} # Index using key to return a value
New York
Bash Scripting เบื้องต้น

การสร้าง Associative Array

หรือจะสร้างและกำหนดค่า Associative Array ในบรรทัดเดียวก็ได้

  • นอกนั้นเหมือนเดิมทุกประการ
declare -A city_details=([city_name]="New York" [population]=14000000)

เข้าถึง 'Key' ของ Associative Array ด้วย !

echo ${!city_details[@]} # Return all the keys
city_name population
Bash Scripting เบื้องต้น

มาฝึกกันเถอะ!

Bash Scripting เบื้องต้น

Preparing Video For Download...