Это не многострочный комментарий. #это однострочный комментарий.
:(двоеточие) вовсе не комментарий, а встроенная команда оболочки, которая в основном представляет собой NOP , нулевая операция, которая ничего не делает, кроме возврата true, like 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"; }