![Cách sử dụng Brace Expansion trong Linux’s Bash Shell Cách sử dụng Brace Expansion trong Linux’s Bash Shell](https://www.howtogeek.com/wp-content/uploads/2019/09/stock-lede-linux-see-attribution.png?width=1200&trim=1,1&bg-color=000&pad=1,1)
Mở rộng dấu ngoặc nhọn là một kỹ thuật hữu ích để tạo danh sách các chuỗi có thể được sử dụng trong các tập lệnh và bí danh và trên dòng lệnh Linux. Tiết kiệm thời gian và tránh sai sót bằng cách gõ ít hơn.
Mở rộng Brace
Trước khi trình bao Bash thực thi một lệnh trong cửa sổ đầu cuối hoặc một dòng trong tập lệnh, nó sẽ kiểm tra xem nó có cần thực hiện bất kỳ thay thế nào trên lệnh hay không. Tên biến được thay thế bằng giá trị của chúng, bí danh được thay thế bằng lệnh viết tắt của chúng và bất kỳ mở rộng nào được thực hiện. Mở rộng Brace là một hình thức mở rộng được hỗ trợ bởi Bash.
Mở rộng dấu ngoặc nhọn có sẵn trong các vỏ hiện đại, nhưng nó có thể bị thiếu trong một số vỏ cũ. Nếu bạn định sử dụng mở rộng dấu ngoặc nhọn trong các tập lệnh, hãy đảm bảo rằng bạn gọi một trình bao hỗ trợ mở rộng dấu ngoặc nhọn, chẳng hạn như Bash:
#!/bin/bash
Chúng tôi sẽ sử dụng Bash cho các ví dụ của chúng tôi.
Tạo danh sách các chuỗi có vẻ mới lạ hơn là lợi ích, nhưng nó cung cấp một số chức năng có thể tiết kiệm thời gian và số lần gõ phím. Thông thường, nó có thể cung cấp một giải pháp đơn giản và thanh lịch cho một vấn đề hoặc yêu cầu.
Mở rộng đơn giản
Một mở rộng dấu ngoặc nhọn được chứa giữa một cặp dấu ngoặc nhọn “{}”. Nó có thể là một danh sách các mục được phân tách bằng dấu phẩy hoặc một số chỉ định phạm vi. Không cho phép khoảng trắng bên trong dấu ngoặc nhọn trừ khi bạn đặt chuỗi trong dấu ngoặc kép “"
. ”
Đối với danh sách được phân tách bằng dấu phẩy, quá trình mở rộng lần lượt lấy từng phần tử và chuyển nó cho lệnh gọi. Trong ví dụ này, nó echo
mà chỉ cần in chúng trong cửa sổ đầu cuối. Lưu ý rằng dấu phẩy bị bỏ qua.
echo {one,two,three,four}
Một danh sách có thể là các từ hoặc chữ số.
echo {1,2,3,4}
Thứ tự của các phần tử trong danh sách là hoàn toàn tùy ý.
echo (4,2,3,1)
Phạm vi mở rộng có ký tự bắt đầu và ký tự kết thúc được kết nối bằng hai dấu chấm ” ..
”Mà không có bất kỳ khoảng trắng nào. Tất cả các phần tử danh sách bị thiếu được cung cấp tự động bởi phần mở rộng để toàn bộ phạm vi từ ký tự bắt đầu đến ký tự kết thúc được tạo.
Thao tác này sẽ in các chữ số từ 1 đến 10.
echo {1..10}
Việc đánh số là tùy ý. Nó không phải bắt đầu từ một.
echo {3..12}
Phạm vi có thể được chỉ định để chúng chạy lùi. Điều này sẽ tạo ra một danh sách từ năm xuống một.
echo {5..1}
Phạm vi có thể bao gồm số âm.
echo {4..-4}
Như chúng tôi đã chỉ ra trước đây, một phạm vi có bắt đầu và kết thúc tính cách. Nó không nhất thiết phải là một con số. Nó có thể là một lá thư.
echo {q..v}
Các chữ cái cũng có thể chạy lùi.
echo {f..a}
Sử dụng Brace Expansion with Loops
Bạn có thể sử dụng mở rộng dấu ngoặc nhọn với phạm vi trong vòng lặp trong tập lệnh.
for i in {3..7} do echo $i done
Phạm vi mở rộng dấu ngoặc nhọn cho phép bạn sử dụng các ký tự làm biến vòng lặp.
for i in {m..q} do echo $i done
Vòng lặp thường được sử dụng trong các tập lệnh, nhưng không có gì ngăn bạn nhập chúng vào dòng lệnh để xem điều gì sẽ xảy ra.
for i in {3..7}; do echo $i; done
for i in {m..q}; do echo $i; done
Kết nối và làm tổ
Hai phần mở rộng liền kề không hoạt động độc lập với nhau. Chúng tương tác với nhau. Mỗi phần tử trong phần mở rộng đầu tiên được tác động bởi mỗi phần tử trong phần mở rộng thứ hai.
echo {q..v}{1..3}
Các phần mở rộng cũng có thể được lồng vào nhau. Một phần mở rộng lồng nhau sẽ hoạt động trên phần tử ngay trước nó.
echo {part-1,part-2{a,b,c,d},part-3}
Bạn cũng có thể lồng các mở rộng bằng cách tạo danh sách mở rộng phạm vi được phân tách bằng dấu phẩy.
echo {{5..0},{1..5}}
Mở đầu và Tái bút
Bạn có thể đặt văn bản trước và sau phần mở rộng dấu ngoặc nhọn để đưa văn bản đó vào kết quả của phần mở rộng. Văn bản đặt trước phần mở rộng được gọi là phần mở đầu, trong khi phần văn bản đặt phía sau phần mở rộng được gọi là phần tái bút.
Lệnh này sử dụng lời mở đầu.
echo chapter{1..3}
Ví dụ này sử dụng một đoạn tái bút:
echo {contents,paper,bilbiography}.md
Và lệnh này sử dụng cả hai.
echo chapter-{1..4}.md
Mở rộng tên tệp và thư mục
Như bạn có thể đoán bây giờ, một trong những công dụng chính của mở rộng dấu ngoặc nhọn là tạo tên tệp và thư mục có thể được chuyển cho các lệnh khác. Chúng tôi đã và đang sử dụng echo
như một cách thuận tiện để xem chính xác điều gì sẽ xảy ra khi kích hoạt mở rộng. Bạn có thể thay thế bất kỳ lệnh nào lấy tên tệp hoặc tên thư mục làm đầu vào và sử dụng mở rộng dấu ngoặc nhọn với nó.
Để tạo nhanh một số tệp, hãy sử dụng touch
:
touch file-{1..4}.txt
ls *.txt
Nếu bạn có nhiều tệp có cùng tên cơ sở nhưng phần mở rộng tệp khác nhau và bạn muốn thực hiện thao tác trên một tập hợp con của chúng, thì mở rộng dấu ngoặc nhọn có thể hữu ích. Ở đây, chúng tôi đang nén một tập hợp con các tệp có “chương trình” làm tên cơ sở thành một tệp ZIP có tên là “source-code.zip”.
Thư mục phát triển chứa nhiều tệp sẽ có cùng tên cơ sở với chương trình chính của bạn. Thông thường, bạn không muốn sao lưu hoặc phân phối các tệp như tệp đối tượng “.o”. Đây là một cách gọn gàng để chỉ bao gồm các loại tệp quan tâm.
zip source-code program{.c,.h,.css}
Lệnh này sẽ tạo một bản sao của một tệp và thêm “.bak” vào nó, tạo một bản sao lưu của tệp gốc. Một điểm thú vị cần lưu ý là phần mở rộng dấu ngoặc nhọn chứa danh sách được phân tách bằng dấu phẩy, nhưng phần tử đầu tiên lại trống. Nếu chúng tôi không bao gồm dấu phẩy, việc mở rộng sẽ không diễn ra.
cp brace/new/prog-1.c{,.bak}
ls brace/new/prog-1.c.bak
Để thực hiện một số hành động trên hai tệp trong các thư mục khác nhau, chúng ta có thể sử dụng mở rộng dấu ngoặc nhọn trong đường dẫn đến tệp.
Trong ví dụ này, thư mục “dấu ngoặc nhọn” chứa hai thư mục con, một thư mục được gọi là “mới” và một được gọi là “cũ”. Chúng chứa các phiên bản khác nhau của cùng một bộ tệp mã nguồn. Chúng tôi sẽ sử dụng diff
chương trình để xem sự khác biệt giữa hai phiên bản “prog-1.c”.
diff brace/{new,old}/prog-1.c
Nếu bạn có một khung thư mục tiêu chuẩn mà bạn cần tạo khi bắt đầu dự án, bạn có thể tạo chúng nhanh chóng bằng cách sử dụng mở rộng dấu ngoặc nhọn. Các mkdir
-p
(cha) tùy chọn tạo bất kỳ thư mục mẹ nào bị thiếu khi một thư mục con được tạo.
mkdir -p {source,build,man,help{/pages,/yelp,/images}}
tree
Bạn có thể sử dụng mở rộng dấu ngoặc nhọn với wget
để tải xuống nhiều tệp.
Trong lệnh này, chúng ta sẽ tải xuống các tệp từ hai thư mục, được gọi là “test1” và “test2”. Mỗi thư mục chứa hai tệp được gọi là “picture1” và “picture2”.
wget https://www.URL-of-your-choice.com/test{1,2}/picture{001,002}.jpg
Liệt kê các tệp cho bạn biết các tệp đã được truy xuất và cách wget
đổi tên tệp để tránh xung đột tên với các tệp hiện có.
ls picture*.*
Ôm giá đỡ
Có vẻ như việc mở rộng dấu ngoặc kép là một trong những bí mật được giữ kín nhất của Linux. Nhiều người nói với tôi rằng họ chưa bao giờ nghe nói về mở rộng dấu ngoặc kép, trong khi những người khác nói với tôi rằng đó là một trong những thủ thuật dòng lệnh yêu thích của họ.
Hãy thử và nó có thể tìm thấy đường vào tập hợp các thủ thuật sử dụng dòng lệnh của bạn.