20
Cơ bản về Linux
2.4.6
Cú pháp đại diện: [!]
Cấu trúc [!] giống với cấu trúc [], nhưng nó sẽ tương ứng bất kỳ ký tự nào, mà không được
liệt kê giữa [! và ]. Ví dụ:
• rm tepcuatoi[!9] sẽ xóa tất cả các tệp tin có tên tepcuatoi cộng với một ký tự đơn,
ngoại trừ tepcuatoi9.
2.4.7
Sâu hơn về cú pháp đại diện
Đây là một số điều cần để ý khi sử dụng các cú pháp đại diện. Đầu tiên, bash "đối xử" các
ký tự đại diện, ?, [, ], và *, một cách đặc biệt, bạn cần rất cẩn thận khi gõ trong đối số của
một câu lệnh những ký tự này. Ví dụ, nếu muốn tạo một tệp tin có chứa dòng [fo]*, thì câu
lệnh sau sẽ không làm cái bạn muốn:
$ echo [fo]* > /tmp/teptinmoi.txt
Vì mẫu [fo]* tương ứng (hoặc không tương ứng) với (các) tệp tin nào đó trong thư mục
hiện thời, nên bạn sẽ thấy tên của chúng, nếu có, trong /tmp/teptinmoi.txt, chứ không phải
là dòng [fo]* như bạn mong đợi. Giải pháp? Một cách giải quyết là đưa các ký tự đó vào
dấu ngoặc đơn, chúng (dấu ngoặc) ngăn chặn không cho bash thực hiện sự khai triển trên
ký tự:
$ echo ’[fo]*’ > /tmp/teptinmoi.txt
Sử dụng cách này, tệp tin mới của bạn sẽ chứa dòng chữ [fo]* như mong muốn. Một giải
pháp khác: sử dụng ký tự thoát (escape character) gạch ngược. Khi đó bash coi [, ], và * là
các ký tự thường chứ không phải ký tự đại diện:
echo \[fo\]\* > /tmp/teptinmoi.txt
Cả hai cách (ngoặc đơn và ký tự thoát) có cùng một tác dụng. Nhân khi đang nói về
ký tự gạch ngược, giờ là thời điểm tốt để nói rằng, nếu muốn dùng \ như một ký tự bình
thường, cần hoặc đưa nó vào ngoặc đơn, hoặc gõ \\,
. Kết qủa là bash sẽ khai triển hai
biểu thức đó thành \.
2.4.8
Ngoặc đơn "gặp" ngoặc kép
Chú ý rằng ngoặc kép có tác dụng tương tự như ngoặc đơn, nhưng vẫn cho phép bash thực
hiện một số khai triển giới hạn nào đó. Ví dụ, ký tự thoát gạch ngược trong một vài trường
hợp vẫn có tác dụng dù nằm trong ngoặc kép. Hãy thử echo "\"! Bởi vậy, ngoặc đơn là
tốt nhất khi bạn thực sự muốn đưa nguyên văn đối số cho các câu lệnh. Để thêm thông tin
về sự khai triển globbing, gõ man 7 glob. Xem thêm thông tin về trích dẫn (quote), bằng các
dấu ngoặc, gõ man 8 glob rồi đọc phần QUOTING. Nếu bạn có dự định trả thi LPI, coi như
đây là bài tập về nhà.
31
ngoặc đơn hay ký tự gạch ngược sẽ là dấu thoát cho \