Câu trả lời:
Các --
yêu cầu cat
khô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
--
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 --
.
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".
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
cat
) chứ không phải bởi trình bao.