Nhập môn Bash Scripting
Alex Scriven
Data Scientist
Hai loại mảng trong Bash:
Trong Python: my_list = [1,3,2,4]
Trong R: my_vector <- c(1,3,2,4)
Tạo mảng chỉ mục số có hai cách trong Bash.
declare -a my_first_array
my_first_array=(1 2 3)
Nhớ: không có khoảng trắng quanh dấu bằng!
Không dùng dấu phẩy để tách phần tử mảng trong Bash:
Cách này không đúng:
my_first_array=(1, 2, 3)
Cách này đúng:
my_first_array=(1 2 3)
array[@]. Lưu ý: Bash yêu cầu ngoặc nhọn quanh tên mảng khi truy cập thuộc tính này.my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
#array[@]echo ${#my_array[@]}
4
Truy cập phần tử mảng bằng ngoặc vuông.
my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
Gán phần tử mảng bằng cú pháp chỉ mục.
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)my_first_array[0]=999echo ${my_first_array[0]}
999
$ khi ghi đè chỉ mục như $my_first_array[0]=999, vì sẽ không hoạt động.Dùng cú pháp array[@]:N:M để cắt (slice) một phần mảng.
N là chỉ mục bắt đầu, M là số phần tử trả về.my_first_array=(15 20 300 42 23 2 4 33 54 67 66)
echo ${my_first_array[@]:3:2}
42 23
Thêm vào mảng bằng array+=(elements).
Ví dụ:
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
Nếu không đặt trong ngoặc tròn khi thêm thì sao? Xem thử.
Ví dụ:
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
Chuỗi 10 sẽ dính vào phần tử đầu tiên. Không như mong muốn!
bash --version trong terminalTrong Python:
my_dict = {'city_name': "New York", 'population': 14000000}
Trong R:
my_list = list(city_name = c('New York'), population = c(14000000))
Chỉ có thể tạo mảng kết hợp bằng cú pháp declare (với -A viết hoa).
Có thể declare trước rồi thêm phần tử, hoặc làm trên một dòng.
Tạo một mảng kết hợp:
declare -A city_details # Khai báo trướccity_details=([city_name]="New York" [population]=14000000) # Thêm phần tửecho ${city_details[city_name]} # Truy cập bằng khóa để lấy giá trị
New York
Cách khác: tạo mảng kết hợp và gán trên một dòng
declare -A city_details=([city_name]="New York" [population]=14000000)
Lấy “khóa” của mảng kết hợp với !
echo ${!city_details[@]} # Trả về tất cả khóa
city_name population
Nhập môn Bash Scripting