Chúng tôi đã đề cập đến việc sử dụng biến trong Bash trước đó – bài viết này sẽ giải thích các biến mảng trong Bash và cung cấp một số ví dụ sử dụng.
Mảng Là Gì
Mảng là một loại biến có thể chứa nhiều giá trị. Đó là một danh sách các giá trị mà bạn có thể lặp qua và thực hiện các thao tác trên từng giá trị riêng lẻ.
Ví dụ, bạn có thể muốn thực hiện một hành động trên một danh sách các tệp. Bằng cách lưu trữ danh sách đó dưới dạng mảng, bạn có thể lặp qua các tên tệp trong đó và thực hiện hành động trên từng tệp.
Các mảng được lập chỉ mục, với vị trí của từng mục trong mảng được biểu thị bằng một số bắt đầu từ 0.
Mảng Bash không yêu cầu các phần tử mảng phải được lập chỉ mục liên tục – hoặc liền kề không có khoảng trống – bạn có thể có giá trị tại vị trí mảng 0, 3, 17 mà không có giá trị ở giữa, ví dụ.
Bạn có thể tìm hiểu thêm về mảng Bash tại Dự án Tài liệu Linux (Linux Documentation Project).
Tạo Mảng Bash
Mảng Bash có thể chứa bất kỳ loại biến Bash nào – đường dẫn, chuỗi, số – thậm chí là các mảng khác.
Tại Sao Bạn Nên Bọc Đường Dẫn Tệp Trong Dấu Nháy Trong Script Shell
Có một số phương pháp để khai báo mảng, được nêu dưới đây.
Khai Báo Gián Tiếp
Mảng có thể được khai báo gián tiếp bằng cách gán giá trị cho phần tử mảng – mảng sẽ được tạo cùng với phần tử mảng có giá trị đã cho.
ARRAYNAME[INDEX]=VALUE
Ví dụ:
#!/bin/bash peopleArray[3]="Tom"
Mảng peopleArray sẽ được tạo tự động (gián tiếp) khi một giá trị trong mảng được gán – trong trường hợp này, giá trị “Tom” được gán cho chỉ mục 3 trong peopleArray mới tạo.
Khai Báo Trực Tiếp
Lệnh declare cũng có thể được dùng để định nghĩa một mảng:
declare -a ARRAYNAME
Ví dụ:
declare -a peopleArray
Điều này sẽ tạo một mảng rỗng tên là peopleArray.
Tạo Bằng Gán Phức Hợp (Compound Assignment)
Đây là phương pháp bạn sẽ dùng nhiều nhất. Nó tạo một mảng với các giá trị đã được gán sẵn.
ARRAYNAME=(value1 value2 ...)
Điều này gán giá trị của mảng cho tên biến. Các giá trị mảng nằm trong () (dấu ngoặc đơn tiêu chuẩn) và được phân tách bằng dấu cách. Các giá trị chứa dấu cách nên được đặt trong dấu nháy.
Ví dụ:
peopleArray=("Tom" "Bill" "Theodore Baker Sr.")
Gán Giá Trị Cho Mảng
Thêm Giá Trị Mới Vào Cuối Mảng
Để thêm một giá trị vào mảng, hãy gán giá trị mà không chỉ định chỉ mục:
ARRAYNAME[]=VALUE
Ví dụ:
peopleArray[]="Tony"
Thay Thế Giá Trị Trong Mảng
Để thay thế một giá trị, ghi đè giá trị tại chỉ mục hiện tại của giá trị đó.
Ví dụ, nếu bạn có một mảng với giá trị tại chỉ mục 7 mà bạn muốn thay thế:
peopleArray[7]="Tony"
Xóa Giá Trị Trong Mảng
Xóa một giá trị khỏi mảng bằng cách sử dụng lệnh unset và chỉ định chỉ mục mảng:
unset ARRAYNAME[INDEX]
Ví dụ:
unset peopleArray[1]
…sẽ xóa giá trị thứ hai trong mảng peopleArray.
Truy Cập Giá Trị Mảng
Để truy cập giá trị trong mảng, bạn phải sử dụng dấu ngoặc nhọn – nếu không, Bash sẽ không diễn giải đúng dấu ngoặc vuông chứa chỉ mục mảng:
echo ${ARRAYNAME[INDEX]}
Ví dụ:
#!/bin/bash
peopleArray=("Tom" "Bill" "Theodore Baker Sr.")
echo ${peopleArray[0]}
…sẽ xuất ra:
Tom
Trong khi nếu dòng cuối là:
echo $peopleArray[0]
Lặp Qua Mảng
Điều phổ biến nhất bạn sẽ làm với mảng là lặp qua chúng để thực hiện các thao tác trên từng phần tử. Chúng tôi đã có một bài viết chuyên biệt về chủ đề này.