Bash Scripting เบื้องต้น
Alex Scriven
Data Scientist
Array ใน Bash มี 2 ประเภท:
ใน Python: my_list = [1,3,2,4]
ใน R: my_vector <- c(1,3,2,4)
การสร้าง Array แบบ Numerical-indexed ใน Bash ทำได้ 2 วิธี
1. ประกาศโดยยังไม่เพิ่มสมาชิก
declare -a my_first_array
2. สร้างและเพิ่มสมาชิกพร้อมกัน
my_first_array=(1 2 3)
จำไว้ — ห้ามมีเว้นวรรครอบเครื่องหมายเท่ากับ!
ใน Bash ไม่ใช้เครื่องหมายจุลภาค (,) คั่นสมาชิกของ Array:
แบบนี้ ไม่ถูกต้อง:
my_first_array=(1, 2, 3)
แบบนี้ ถูกต้อง:
my_first_array=(1 2 3)
array[@] โดย Bash กำหนดให้ใส่วงเล็บปีกการอบชื่อ Array เมื่อต้องการเข้าถึง Property เหล่านี้my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
#array[@]echo ${#my_array[@]}
4
เข้าถึงสมาชิกของ Array ด้วยวงเล็บเหลี่ยม
my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
กำหนดค่าสมาชิกของ Array ด้วย Index Notation
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)my_first_array[0]=999echo ${my_first_array[0]}
999
$ ตอนเขียนทับ Index เช่น $my_first_array[0]=999 เพราะจะใช้งานไม่ได้ใช้ 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
เพิ่มสมาชิกต่อท้าย 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
จะเกิดอะไรขึ้นถ้าไม่ใส่วงเล็บรอบค่าที่ต้องการเพิ่ม? มาดูกัน
ตัวอย่าง:
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 --version ใน Terminalใน Python:
my_dict = {'city_name': "New York", 'population': 14000000}
ใน R:
my_list = list(city_name = c('New York'), population = c(14000000))
Associative Array สร้างได้ด้วย Syntax declare เท่านั้น (ใช้ -A ตัวพิมพ์ใหญ่)
จะประกาศก่อนแล้วค่อยเพิ่มสมาชิก หรือทำในบรรทัดเดียวก็ได้
มาสร้าง Associative Array กัน:
declare -A city_details # Declare firstcity_details=([city_name]="New York" [population]=14000000) # Add elementsecho ${city_details[city_name]} # Index using key to return a value
New York
หรือจะสร้างและกำหนดค่า 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 เบื้องต้น