Це не багаторядковий коментар. #
- це коментар в одному рядку.
:
(двокрапка) - це зовсім не коментар, а скоріше вбудована команда оболонки, яка в основному є NOP , нульовою операцією, яка не робить нічого, крім повернення true, як true
(і, таким чином, встановлюється $?
0 як побічний ефект). Однак, оскільки це команда, вона може приймати аргументи, і оскільки вона ігнорує свої аргументи, в більшості випадків вона поверхово діє як коментар. Основна проблема цього хизу полягає в тому, що аргументи все ще розширюються, що призводить до безлічі непередбачуваних наслідків. На аргументи все ще впливають синтаксичні помилки, перенаправлення все ще виконуються, тому вони : > file
будуть усіченими file
, а : $(dangerous command)
підстановки все ще будуть виконуватися.
Найменш дивно, абсолютно безпечний спосіб вставляти коментарі в сценарії оболонки - це #
. Дотримуйтесь цього навіть для багаторядкових коментарів. Ніколи не намагайтеся (ab) використовувати :
для коментарів. У оболонці немає виділеного багаторядкового механізму коментування, який би був аналогічним косої зірці /* */
у C
мовах-подібних.
Для повноти, але не тому, що це рекомендується практикою, я зазначу, що тут можна використовувати документи, щоб робити багаторядкові "коментарі":
: <<'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"; }