Skip to main content

[bash] array

Array là một data type cơ bản trong bash. Sử dụng rất dễ dàng, hiệu quả lại mênh mang.

Tạo 1 array và assign nó cho 1 variable cute:

hvn@archhvn: ~ () $ cute[0]=lam
hvn@archhvn: ~ () $ cute[1]=hiep
hvn@archhvn: ~ () $ echo ${cute}
lam
hvn@archhvn: ~ () $ echo ${cute[0]}
lam
hvn@archhvn: ~ () $ echo ${cute[1]}
hiep
hvn@archhvn: ~ () $ echo ${cute[@]}
lam hiep
hvn@archhvn: ~ () $ echo ${cute[*]}
lam hiep

Dấu @ và dấu * để chọn hết các phần tử trong array cute.
Khi không chỉ rõ index, array sẽ trả về phần tử (element) đầu tiên
Nếu phần tử không tồn tại, array sẽ trả về empty string.
Dùng ${XXX} để thay thế một variable bằng value của nó.

   Parameter Expansion
       The `$' character introduces parameter expansion, command substitution, or arithmetic expansion.
 ${parameter}
              The  value  of parameter is substituted. 

hvn@archhvn: ~ () $ echo ${cute[5]}

hvn@archhvn: ~ () $

Cách khác để tạo   array : Dùng dấu () quanh các string phân cách bởi dấu space.
$ lang=("bash" "C" "python" "blah kute")
hvn@archhvn: ~ () $ echo ${lang[*]}
bash C python blah kute
Copy array:
hvn@archhvn: ~ () $ lang2=("${lang[@]}")
hvn@archhvn: ~ () $ echo ${lang2[3]}
blah kute
đoạn code copy trông có vẻ loằng ngoằng nhưng thực chất nó đơn giản: dấu () là syntax giúp tạo array đã nói trên, ${lang[@]} trả về tất cả các element trong array, “” để đảm bảo các element chứa dấu space được bảo toàn.

Đoạn code trên copy giá trị chứ không copy reference. Khi thay đổi element 1 của lang thành giá trị "nana", lang2 không bị ảnh hưởng
hvn@archhvn: ~ () $ lang[1]='nana'
hvn@archhvn: ~ () $ echo ${lang[@]}
bash nana python blah kute
hvn@archhvn: ~ () $ echo ${lang2[@]}
bash C python blah kute
Hiển thị số element của array (thêm dấu # trước lang)
hvn@archhvn: ~ () $ echo ${#lang[@]}
4


Và cuối cùng là loop qua các phần tử của array, nếu không array cũng chỉ để làm cảnh :@)
hvn@archhvn: ~ () $ for i in "${lang[@]}"; do echo $i; done
bash
nana
python
blah kute
hvn@archhvn: ~ () $ for i in "${lang[*]}"; do echo $i; done
bash nana python blah kute
$ for i in ${lang[*]}; do echo $i; done
bash
nana
python
blah
kute

Có thể thấy kết quả khi dùng * và @ là khác nhau, và kết quả dùng @ là chính xác như mong đợi.

=> để loop qua 1 bash array dùng
for i in  "${array_name[@]}"

Comments

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG