Câu trả lời:
Chính xác hơn, dấu gạch ngang kép ( --
) được sử dụng trong các lệnh tích hợp bash và nhiều lệnh khác để biểu thị sự kết thúc của các tùy chọn lệnh, sau đó chỉ các tham số vị trí được chấp nhận.
Ví dụ sử dụng: giả sử bạn muốn grep một tệp cho chuỗi -v
- thông thường -v
sẽ được coi là tùy chọn để đảo ngược ý nghĩa khớp (chỉ hiển thị các dòng không khớp), nhưng với --
bạn có thể grep cho chuỗi -v
như thế này:
grep -- -v file
--
hoạt động để tách các tùy chọn khỏi các biểu thức thông thường trong grep
, nhưng cách chính tắc là sử dụng -e
/ --regexp
.
--
, mặc dù bạn đã lưu ý rằng ví dụ của tôi ở trên cũng có thể được viết là grep -e -v file
(mặc dù điều đó rất khó hiểu).
bash
các lệnh dựng sẵn chấp nhận --
là kết thúc của dấu tùy chọn. [
và echo
không ví dụ ( một trong những lý do echo
không thể được sử dụng đáng tin cậy ).
Trong phần man bash
chúng ta có thể đọc trong phần Shell Buildin Commands :
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 bằng cách
-
chấp nhận--
để biểu thị kết thúc của các tùy chọn .Các
:
,true
,false
, vàtest
dựng sẵn không chấp nhận lựa chọn và không điều trị--
đặc biệt. Cácexit
,logout
,break
,continue
,let
, vàshift
builtins chấp nhận và lập luận quá trình bắt đầu với-
mà không đòi hỏi--
. Các nội dung khác chấp nhận đối số nhưng không được chỉ định là chấp nhận tùy chọn giải thích các đối số bắt đầu bằng-
tùy chọn không hợp lệ và yêu cầu--
ngăn chặn giải thích này.Lưu ý rằng
echo
không giải thích--
có nghĩa là kết thúc các tùy chọn.
man bash
(ghi chú cho lần sau :).
POSIX.1-2017
12.2 Nguyên tắc Cú pháp Tiện ích
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ự ''.
http://pub.opengroup.org/onlinepub/9699919799/basingefs/V1_chap12.html#tag_12_02
set
hợp, nơi thực sự cần thiết.