Nó không vô dụng - đó là một hình thức chuyên biệt của >
toán tử chuyển hướng đơn giản (và, có lẽ khó hiểu, không liên quan gì đến đường ống). bash
và hầu hết các shell hiện đại khác đều có tùy chọn noclobber
, ngăn chuyển hướng ghi đè hoặc phá hủy một tệp đã tồn tại. Ví dụ: nếu noclobber
là đúng và tệp /tmp/output.txt
đã tồn tại, thì điều này sẽ thất bại:
$ some-command > /tmp/output.txt
Tuy nhiên, bạn có thể ghi đè rõ ràng cài đặt noclobber
với >|
toán tử chuyển hướng - chuyển hướng sẽ hoạt động, ngay cả khi noclobber
được đặt.
Bạn có thể tìm hiểu nếu noclobber
được đặt trong môi trường hiện tại của bạn với set -o
.
Đối với ghi chú lịch sử, cả tùy chọn "noclobber" và tính năng bỏ qua của nó đều xuất phát từ csh
(cuối thập niên 70). ksh
sao chép nó (đầu những năm 80) nhưng được sử dụng >|
thay vì >!
. POSIX đã chỉ định ksh
cú pháp (vì vậy tất cả các vỏ POSIX bao gồm bash, các dẫn xuất tro mới hơn được sử dụng như sh trên một số hệ thống hỗ trợ nó). Zsh hỗ trợ cả hai cú pháp. Tôi không nghĩ rằng nó đã được thêm vào bất kỳ biến thể vỏ Bourne nào nhưng tôi có thể sai.
>|
tại: stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21/