Це не багаторядковий коментар. #- це коментар в одному рядку.
:(двокрапка) - це зовсім не коментар, а скоріше вбудована команда оболонки, яка в основному є 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"; }