Một cách phổ biến để thực hiện mọi thứ với một vài tệp là, và đừng đánh tôi vì điều đó:
for f in $(ls); do …
Bây giờ, để an toàn trước các tệp có dấu cách hoặc các ký tự lạ khác, một cách ngây thơ sẽ là:
find . -type f -print0 | while IFS= read -r -d '' file; …
Ở đây, -d ''
viết tắt của việc đặt ASCII NUL như trong -d $'\0'
.
Nhưng tại sao lại như vậy? Tại sao ''
và $'\0'
giống nhau? Đó có phải là do gốc C của Bash với một chuỗi rỗng luôn bị chấm dứt không?
for f in *
thay vì phân tích cú pháp ls
.
for i in $(ls)
là ngu ngốc khủng khiếp. Tôi gần như xấu hổ vì tôi đã sử dụng nó như một ví dụ tồi tệ ở đây.
find … -exec
thay vì lặp xung quanh các tệp, hoạt động cho hầu hết các trường hợp bạn sử dụng vòng lặp for như vậy để thay thế. Ở đây, find
chăm sóc tất cả mọi thứ cho bạn.