Không - có nghĩa là gì trong các lệnh thiết bị đầu cuối?


23

Tôi đã thấy nhiều hướng dẫn sử dụng --lệnh sau. Một cái gì đó như thế này:

command -- 

Điều này --có nghĩa là gì?


Video hướng dẫn gì?
TheWanderer


Trên thực tế, tôi ngạc nhiên rằng câu hỏi này chưa phải là một bản sao trên AU. Các câu hỏi giống hệt nhau trên các cộng đồng StackExchange khác không được tính là bản sao (viz liên kết được cung cấp bởi @edwinksl)? Có chuyện gì thế? Có lẽ tôi nên hỏi điều đó trên META ....
Cbhihe

@Cbhihe Tôi không biết về một cơ chế cho phép chúng tôi trỏ đến các mục tiêu trùng lặp của các trang SE khác. Dù sao, nó không xảy ra quá thường xuyên, vì vậy có lẽ không cần một cái nào cả.
edwinksl

3
@ nặc danh2 tại sao trên thế giới chúng ta sẽ làm điều đó? Câu hỏi là về chủ đề ở đây, vì vậy nó có thể ở lại. Di chuyển nó sẽ xóa thông tin khỏi AU và không thêm gì mới vào U & L, vì vậy tôi không hiểu tại sao nó sẽ là một điều tốt.
terdon

Câu trả lời:


46

Cái --này được sử dụng để chỉ sự kết thúc của các tùy chọn dòng lệnh. Điều này cho phép bạn sử dụng các đối số bắt đầu bằng --. Ví dụ: nếu bạn tạo một tệp có tên --foo:

$ > '--foo'
$ ls
--foo

Và sau đó thử xóa nó, rmsẽ nghĩ rằng bạn đang đưa ra một đối số:

$ rm --foo 
rm: unrecognized option '--foo'
Try 'rm ./--foo' to remove the file '--foo'.
Try 'rm --help' for more information.

Một cách để làm điều này là sử dụng --:

$ rm -- --foo

Đây là cách làm phổ biến và được POSIX khuyên dùng , vì vậy nó được nhiều chương trình hỗ trợ.


13
Nó không được Bash thực hiện chút nào. Đây một tính năng của rmchương trình và của nhiều tiện ích tuân thủ POSIX. Xem Hướng dẫn 10 . Để thực sự kiểm tra xem đó không phải là Bash đang thực hiện công việc (và điều đó sẽ không có ý nghĩa), chỉ cần tạo một kịch bản nhỏ chỉ printf '> %s <\n' "$@"và khởi chạy nó với --.
gniourf_gniourf

3
@gniourf_gniourf d'oh! Tôi đã kiểm tra bằng cách viết một tập lệnh perl nhỏ in các tùy chọn của nó và nó sẽ không thấy nếu bạn vượt qua nó --, nhưng, tất nhiên, đó đơn giản là vì mô-đun Perl có liên quan ( getopts) cũng hỗ trợ nó. Bạn hoàn toàn đúng, tôi chỉ cần nhanh chóng tìm kiếm man bash, thấy phần tôi đã trích dẫn nhưng không nhận thấy rằng nó nằm trong phần "tùy chọn dòng lệnh". Cảm ơn đã sửa, trả lời chỉnh sửa.
terdon

1

Hầu hết các lệnh sẽ sử dụng một - để nói với lệnh rằng các tham số tiếp theo sẽ được xử lý khác nhau. Một ví dụ là rm - --filename được ghi chú ở trên. Một ví dụ khác, một tập lệnh như 'startx' sẽ tự diễn giải mọi thứ trước đó - và chuyển mọi thứ sau nó đến máy chủ X.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.