Tin tức và phân tích của tất cả các thiết bị di động

Hướng dẫn về mảng Bash

Trong hướng dẫn về mảng Bash này, bạn sẽ học cách khai báo và làm việc với các mảng được lập chỉ mục và kết hợp trong Bash.

Trong Bash, bạn có thể tạo mảng để chứa các bộ sưu tập vật phẩm. Mảng Bash là bộ sưu tập một chiều. Trong các ngôn ngữ lập trình như C và C++, mảng là tập hợp các phần tử có cùng kiểu dữ liệu. Tuy nhiên, trong Bash, tùy thuộc vào trường hợp sử dụng của bạn, bạn có thể lưu trữ số nguyên và chuỗi trong cùng một mảng.

Trong hướng dẫn này, bạn sẽ học cách khai báo một mảng Bash và truy cập các phần tử của nó. Tiếp theo, bạn sẽ học cách duyệt qua các phần tử của một mảng và nối các phần tử vào mảng đó. Cuối cùng, bạn sẽ tìm hiểu về mảng kết hợp trong Bash.

Hãy bắt đầu!

⚙ Bạn muốn cùng nhau viết mã? Dưới đây là những điều kiện tiên quyết:

Cách khai báo một mảng Bash

Trong phần này, bạn sẽ tìm hiểu cú pháp khai báo một mảng Bash và một số ví dụ về mã.

Cú pháp khai báo mảng Bash

Bạn có thể khai báo một mảng trong Bash bằng cú pháp sau:

$ arrayName=(elt1 elt2 ... eltN)

# arrayName is the name of the array
# elt1 through eltN are the N elements in the array

Trong cú pháp trên, tablename là tên của một mảng chứa N phần tử elt1…eltN.

Các phần tử mảng được đặt trong dấu ngoặc đơn mở và đóng (). Cũng lưu ý rằng các phần tử của mảng được phân tách bằng dấu cách. Giống như bất kỳ biến Bash nào, không được có khoảng trắng trước hoặc sau toán tử gán =.

📑 Trong hầu hết các ngôn ngữ lập trình khác, các phần tử của mảng hoặc bộ sưu tập tương tự được phân tách bằng dấu phẩy. Nhưng trong Bash, khoảng trắng là dấu phân cách.

Trong Bash, những mảng như vậy, trong đó các phần tử được xác định bằng chỉ mục của chúng, được gọi là mảng được lập chỉ mục.

Khai báo các mảng được lập chỉ mục trong Bash

Hãy tạo giá, một dãy số.

$ prices=(24 27 18 30 15)

Như đã đề cập trong cú pháp, các số trong mảng giá được phân tách bằng dấu cách trong ngoặc đơn, không có dấu cách trước hoặc sau toán tử gán =.

Trong Bash, bạn có thể sử dụng lệnh echo để in giá trị của một biến. Sử dụng $variableName sẽ in giá trị của VariableName. Tuy nhiên, bạn có thể thấy rằng việc sử dụng tên mảng chỉ khiến phần tử đầu tiên được hiển thị.

$ echo $prices
24

Mảng Bash sử dụng chỉ mục null. Vì vậy, mục đầu tiên có một chỉ mục 0phần tử thứ hai có chỉ mục 1 và như thế. Bạn cũng có thể sử dụng chỉ mục phủ định; chỉ số của phần tử cuối cùng của mảng là -1.

Điều gì xảy ra nếu bạn cố truy cập một mục ở một chỉ mục cụ thể và in nó? Hãy thử in một mục có chỉ mục 1.

$ echo $prices[1]
24[1]

Tại sao thoát 24[1]? 🤔 Điều này là do Bash thay thế $prices bằng 24, phần tử đầu tiên của mảng i [1] được in như vậy.

Để in một mục ở một chỉ mục cụ thể, bạn có thể sử dụng phần mở rộng tham số có dạng ${prices[index]}.

$ echo ${prices[1]}
# 27
$ echo ${prices[2]}
# 18

Để in tất cả các phần tử trong một mảng, bạn có thể chỉ định @ thay vì một chỉ mục cụ thể.

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

Tiếp theo, hãy tạo một mảng các chuỗi. Chạy lệnh sau sẽ tạo một mảng được lập chỉ mục:

$ declare -a fruits

Tùy chọn -a tạo một mảng được lập chỉ mục. Bây giờ bạn có thể điền vào mảng từng phần tử một bằng cách khai báo phần tử đó tại một chỉ mục cụ thể như dưới đây:

$ fruits[0]="cherry"
$ fruits[1]="berry"
$ fruits[2]="apple"
$ fruits[3]="pear"
$ fruits[4]="melon"
$ fruits[5]="orange"

Bây giờ để in tất cả các phần tử của một mảng, bạn có thể sử dụng ${fruits[@]}.

$ echo ${fruits[@]}
cherry berry apple pear melon orange

Truy cập các phần tử của mảng Bash

Các phần tử mảng có thể được truy cập theo những cách sau:

  • Bước qua mảng và truy cập trực tiếp vào phần tử
  • Duyệt qua một tập hợp các chỉ mục và truy cập các mục tại một chỉ mục cụ thể

Lặp lại các phần tử mảng và truy cập

Nếu bạn đang mã hóa bằng python, bạn đã sử dụng vòng lặp for bằng cú pháp sau:

for elt in some_list:
    print(elt)

Bây giờ hãy viết Bash tương đương với vòng lặp for ở trên.

Chúng tôi biết rằng {giá[@]} mở rộng tới tất cả các mục trong mảng giá. Và ${giá[@]} cho chúng ta giá trị của tất cả các phần tử.

Vòng lặp for trong Bash tương tự như cú pháp vòng lặp for của Python, nhưng các câu lệnh trong phần thân vòng lặp phải được đặt trong các lệnh do và done, như được hiển thị:

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

Vì chúng ta sử dụng lệnh echo và in biến giá nên chúng ta nhận được kết quả như sau:

# output
24
27
18
30
15

Truy cập các phần tử bằng cách sử dụng chỉ mục mảng

Một cách khác để duyệt mảng là sử dụng chỉ mục phần tử. Điều này tương tự như cấu trúc vòng lặp for của Python sử dụng hàm range():

for i in range(len(some_list)):
    print(i)

Để có danh sách các chỉ mục cần duyệt, bạn có thể đặt dấu chấm than (!) Trước tên mảng trong phần mở rộng tham số. Điều này sẽ cung cấp cho bạn danh sách tất cả các chỉ mục hợp lệ cho mảng như được hiển thị:

$ echo ${!prices[@]}
0 1 2 3 4

Bảng giá bao gồm 5 các phần tử, vì vậy chỉ mục bắt đầu bằng 0 và phát triển thành 4.

Sau đó, chúng ta có thể lặp qua danh sách các chỉ mục và truy cập mục ở mỗi chỉ mục. Đối với chỉ số và ${prices[i]} là phần tử có chỉ số i.

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

Vòng lặp trên in ra tất cả các phần tử của một mảng.

# output
24
27
18
30
15

💬 Ở đây, sau khi truy cập vào từng phần tử, chúng ta thực hiện một thao tác đơn giản để in giá trị của nó. Nói chung, chúng ta có thể có bất kỳ quá trình xử lý phần tử hợp lệ nào.

Nối các mục vào mảng Bash

Có năm yếu tố trong bảng giá (với các chỉ số 0,1,2,3 Và 4). Nếu bạn muốn thêm một phần tử vào cuối mảng trong chỉ mục 5bạn có thể làm như sau:

$ prices[5]=21

Ta thấy số 21 đã được thêm vào cuối mảng giá.

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

Tuy nhiên, sẽ thuận tiện hơn khi thêm vào cuối mảng—mà không cần nhớ—chỉ mục của mục cuối cùng được thêm vào hoặc số lượng mục hiện có trong mảng.

Bạn có thể sử dụng arrayName+=(elements(s)) nó để nối thêm một hoặc nhiều phần tử vào một mảng như được hiển thị:

$ prices+=(10)

Bây giờ nếu in mảng giá, chúng ta sẽ thấy 10 đã được thêm vào cuối mảng.

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

Tiếp theo, hãy tìm hiểu cách khai báo mảng kết hợp trong Bash.

Mảng kết hợp trong Bash

Nếu bạn muốn xác định mối quan hệ theo cặp khóa-giá trị, bạn có thể sử dụng mảng kết hợp. Bạn có thể khai báo một mảng kết hợp bằng cú pháp chung sau. Lưu ý rằng chúng tôi sử dụng tùy chọn -A thay vì -a.

$ declare -A fruits_prices

Bạn có thể thêm các phần tử vào mảng kết hợp bằng cách chỉ định khóa và giá trị tương ứng. Ở đây chúng tôi đã thêm tên trái cây làm khóa và số từ bảng giá làm giá trị.

$ fruits_prices[cherry]=24
$ fruits_prices[berry]=27
$ fruits_prices[apple]=18
$ fruits_prices[pear]=30
$ fruits_prices[melon]=15
$ fruits_prices[orange]=21

Vậy làm cách nào để truy cập các phần tử trong mảng kết hợp?

Tương tự như tra cứu một giá trị bằng khóa tương ứng trong từ điển Python, các giá trị trong mảng kết hợp có thể được truy cập bằng khóa.

$ echo ${fruits_prices[berry]}
# 27

Chúng tôi thấy rằng ${fruits_price[@]} mở rộng tới i ${!fruits_price[@]} mở rộng thành các khóa.

$ echo ${fruits_prices[@]}
# Output: 18 27 21 24 30 15
$ echo ${!fruits_prices[@]}
# Output: apple berry orange cherry pear melon

Lưu ý: Thứ tự các mục không giống với thứ tự thêm vào. Điều này là do, không giống như mảng được lập chỉ mục, mảng kết hợp không phải là tập hợp có thứ tự. Thay vào đó, chúng hoạt động dựa trên mối liên kết giữa khóa và giá trị. Do đó, khóa dành cho mảng kết hợp và chỉ mục dành cho mảng chỉ mục.

Bạn cũng có thể lặp qua một mảng kết hợp và truy cập các khóa như sau:

$ for key in ${!fruits_prices[@]}
> do
> echo $key
> done
# Output
apple
berry
orange
cherry
pear
melon

Vòng lặp bên dưới cho thấy cách truy cập các giá trị.

$ for value in ${fruits_prices[@]}
> do
> echo $value
> done
# Output
18
27
21
24
30
15

Mặc dù nên sử dụng arrayName[key]=value, bạn cũng có thể khai báo nó dưới dạng một chuỗi như thế này:

declare -A arrayName
arrayName=(key1 value1 key2 value2 ... keyN valueN)

Đây là cách Bash xác định phần tử đầu tiên là khóa đầu tiên, phần tử thứ hai là giá trị đầu tiên, v.v.

Tóm lại

Tôi hy vọng bây giờ bạn đã hiểu cách tạo và làm việc với mảng Bash. Dưới đây là tổng quan ngắn gọn về những gì bạn đã học được.

  • Bạn có thể khai báo một mảng được lập chỉ mục trong Bash bằng cú pháp array_name=(elt1 elt2 elt3 … eltN) hoặc chạy khai báo -a array_name và thêm các phần tử vào mảng.
  • Để truy cập các phần tử, bạn có thể lặp qua bằng cách sử dụng ${arrayName[@]}. Ngoài ra, bạn có thể nhận danh sách tất cả các chỉ mục hợp lệ bằng cách sử dụng phần mở rộng tham số ${!arrayName[@]}.
  • Cuối cùng, bạn cũng đã học cách khai báo một mảng kết hợp để lưu trữ các cặp khóa-giá trị trong Bash.

Sau đó xem hướng dẫn về vòng lặp trong Bash.