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