Đó không phải là một bình luận nhiều dòng. #
là một nhận xét dòng duy nhất.
:
(dấu hai chấm) hoàn toàn không phải là một nhận xét, mà là một lệnh tích hợp sẵn về cơ bản là NOP , một hoạt động null không có gì ngoại trừ trả về true, như true
(và do đó đặt $?
thành 0 làm hiệu ứng phụ). Tuy nhiên, vì nó là một lệnh, nó có thể chấp nhận các đối số và vì nó bỏ qua các đối số của nó, nên trong hầu hết các trường hợp, nó hoạt động bề ngoài như một nhận xét. Vấn đề chính với loại bùn này là các đối số vẫn được mở rộng, dẫn đến một loạt các hậu quả không lường trước được. Các đối số vẫn bị ảnh hưởng bởi lỗi cú pháp, chuyển hướng vẫn được thực hiện nên : > file
sẽ cắt bớt file
và : $(dangerous command)
thay thế sẽ vẫn chạy.
Các ngạc nhiên cách nhất hoàn toàn an toàn để chèn chú thích trong kịch bản shell là với #
. Dính vào đó ngay cả đối với các bình luận nhiều dòng. Không bao giờ cố gắng (ab) sử dụng :
cho ý kiến. Không có cơ chế nhận xét đa dòng chuyên dụng trong shell tương tự như dạng dấu gạch chéo /* */
trong các C
ngôn ngữ giống như ngôn ngữ.
Để hoàn thiện, nhưng không phải vì nó được khuyến nghị thực hành, tôi sẽ đề cập rằng có thể sử dụng tài liệu ở đây để thực hiện "nhận xét" nhiều dòng:
: <<'end_long_comment'
This is an abuse of the null command ':' and the here-document syntax
to achieve a "multi-line comment". According to the POSIX spec linked
above, if any character in the delimiter word ("end_long_comment" in
this case) above is quoted, the here-document will not be expanded in
any way. This is **critical**, as failing to quote the "end_long_comment"
will result in the problems with unintended expansions described above.
All of this text in this here-doc goes to the standard input of :, which
does nothing with it, hence the effect is like a comment. There is very
little point to doing this besides throwing people off. Just use '#'.
end_long_comment
CommentedOutBlock() { echo "test"; }