Lưu ý: câu trả lời của tôi KHÔNG hợp lệ trong trường hợp của OP và chỉ áp dụng cho các công cụ theo quy ước được đề cập dưới đây và không phải trong trường hợp tệp có tên chính xác -
(dấu gạch ngang), thường là trường hợp đặc biệt để xác định rằng đọc từ tiêu chuẩn đầu vào dự kiến. Xem câu trả lời được chấp nhận.
Để lại đây vì nó chứa thông tin hữu ích cho các trường hợp khác mà người ta có thể vấp ngã trong khi tìm kiếm câu trả lời.
Double-Dash đó!
Sử dụng --
quy ước double-dash ( ) tiêu chuẩn để chỉ ra đối số cuối cùng:
less -- -FILENAME
Thí dụ
$ echo "meh" > -badname
$ less -badname
Number is required after -b
$ less -- -badname # GREAT SUCCESS!
Ai vậy?
--
Đối số này xuất phát từ một quy ước được hỗ trợ bởi hầu hết các triển khai tiện ích shell và công cụ dòng lệnh, và hầu hết các shell sẽ ủng hộ rõ ràng rằng bạn nên tuân theo nó khi triển khai các công cụ CLI.
Được giới thiệu bởi Nhóm Mở
Opengroup cũng đề cập đến nó trong phần Mặc định mô tả tiện ích (v6) của Đặc tả cơ sở:
Hành vi mặc định: [...] Các tiện ích tiêu chuẩn không chấp nhận các tùy chọn, nhưng chấp nhận toán hạng, sẽ nhận ra "-" là đối số đầu tiên bị loại bỏ.
Yêu cầu để nhận ra "-" là bởi vì các ứng dụng tuân thủ cần một cách để bảo vệ toán hạng của chúng khỏi mọi tùy chọn tùy ý mà việc triển khai có thể cung cấp như một phần mở rộng. Ví dụ: nếu foo tiện ích tiêu chuẩn được liệt kê là không có tùy chọn và ứng dụng cần thiết để đặt cho nó một tên đường dẫn có dấu gạch nối hàng đầu, thì nó có thể thực hiện một cách an toàn như sau:
foo -- -myfile
và tránh mọi vấn đề với -m được sử dụng như một phần mở rộng.
Và trong Nguyên tắc Cú pháp Tiện ích (v7):
Hướng dẫn 10:
Đối số đầu tiên không phải là đối số tùy chọn nên được chấp nhận làm dấu phân cách chỉ ra kết thúc của các tùy chọn. Bất kỳ đối số nào sau đây phải được coi là toán hạng, ngay cả khi chúng bắt đầu bằng ký tự '-'.
Được đề xuất bởi Bash
Ở đây, trích từ hướng dẫn bash, về các nội dung hỗ trợ của nó:
Trừ khi có ghi chú khác, mỗi lệnh dựng sẵn được ghi lại trong phần này dưới dạng chấp nhận các tùy chọn đi trước - chấp nhận - để biểu thị sự kết thúc của các tùy chọn.
Các nội dung:, đúng, sai và thử nghiệm không chấp nhận các tùy chọn và không xử lý - đặc biệt. Lối ra, đăng xuất, phá vỡ, tiếp tục, cho phép và thay đổi các nội dung chấp nhận và xử lý các đối số bắt đầu bằng - mà không yêu cầu -. Các nội dung khác chấp nhận các đối số nhưng không được chỉ định là chấp nhận các tùy chọn diễn giải các đối số bắt đầu bằng - như các tùy chọn không hợp lệ và yêu cầu - để ngăn chặn việc giải thích này.
Lưu ý rằng echo không diễn giải - có nghĩa là kết thúc các tùy chọn.
Đọc thêm