Không - có nghĩa là gì - trong (dấu gạch ngang kép) trong lệnh shell này?


12

Tôi có lệnh shell này:

kill `cat -- $PIDFILE`

Những gì đôi - làm ở đây? Tại sao không sử dụng chỉ

kill `cat $PIDFILE`

Câu trả lời:


20

Các --yêu cầu catkhông cố phân tích cái gì xuất hiện sau nó dưới dạng tùy chọn dòng lệnh.

Ví dụ, nghĩ về những gì sẽ xảy ra trong hai trường hợp nếu biến $PIDFILEđược định nghĩa là PIDFILE="--version". Trên máy của tôi, họ cho kết quả như sau:

$ cat $PIDFILE
cat (GNU coreutils) 6.10
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Torbjorn Granlund and Richard M. Stallman.

$ cat -- $PIDFILE
cat: --version: No such file or directory

3
Điều đáng chú ý là hành vi này (trong khi rất phổ biến) được xác định bởi chương trình nhận (tức là cat) chứ không phải bởi trình bao.
dmckee --- ex-moderator mèo con

Có tài liệu hay hướng dẫn nào về cách viết script shell của riêng bạn mà hiểu điều đó --có nghĩa là kết thúc các tùy chọn dòng lệnh không? Tôi đã thấy những cái có getopts và các kỹ thuật khác, nhưng không có gì để bàn --.
CMCDragonkai

3
@CMCDragonkai Bạn không cần tìm kiếm gì thêm ngoài getopt(1)trang man : "Mỗi tham số sau tham số '-' luôn được hiểu là tham số không tùy chọn".
Mikael Auno

1

POSIX.1-2017

POSIX cũng chỉ định nó tại: http://pub.opengroup.org/onlinepub/9699919799/basingefs/V1_chap12.html#tag_12_02

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ự '-'.

Xem thêm: /unix/11376/what-does-double-dash-mean-also- Unknown-as-bare-double-dash

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.