Tôi đã hack rất nhiều kịch bản shell, và đôi khi những điều đơn giản nhất lại gây trở ngại cho tôi. Hôm nay tôi đã chạy qua một kịch bản sử dụng rộng rãi các :
nội dung bash (dấu hai chấm).
Sự thông thạo dường như đủ đơn giản:
: (a colon) : [arguments]
Không làm gì ngoài việc mở rộng đối số và thực hiện chuyển hướng. Trạng thái trả về bằng không.
Tuy nhiên trước đây tôi chỉ thấy điều này được sử dụng trong các cuộc biểu tình mở rộng vỏ. Trường hợp sử dụng trong tập lệnh tôi chạy qua đã sử dụng rộng rãi cấu trúc này:
if [ -f ${file} ]; then
grep some_string ${file} >> otherfile || :
grep other_string ${file} >> otherfile || :
fi
Thực tế đã có hàng trăm greps, nhưng chúng chỉ giống nhau hơn. Không có chuyển hướng đầu vào / đầu ra nào ngoài cấu trúc đơn giản ở trên. Không có giá trị trả về được kiểm tra sau trong tập lệnh.
Tôi đang đọc điều này như một công trình vô dụng nói rằng "hoặc không làm gì cả". Mục đích nào có thể kết thúc những greps này với "hoặc không làm gì" phục vụ? Trong trường hợp nào, cấu trúc này sẽ gây ra một kết quả khác ngoài việc đơn giản là loại bỏ khỏi || :
tất cả các trường hợp?
:
thay thếtrue
. Có lẽerrexit
được đặt và tác giả không quan tâm đến trạng thái thoát của một số lệnh.