Esse não é um comentário de várias linhas. #
é um comentário de linha única.
:
(dois pontos) não é um comentário, mas um comando interno do shell que é basicamente um NOP , uma operação nula que não faz nada, exceto retornar true, como true
(por exemplo, definir $?
0 como um efeito colateral). No entanto, como é um comando, ele pode aceitar argumentos e, como ignora seus argumentos, na maioria dos casos age superficialmente como um comentário. O principal problema desse kludge é que os argumentos ainda são expandidos, levando a uma série de consequências não intencionais. Os argumentos ainda são afetados por erros de sintaxe, os redirecionamentos ainda são executados e, portanto, : > file
serão truncados file
e as : $(dangerous command)
substituições ainda serão executadas.
A maneira menos surpreendente e completamente segura de inserir comentários em scripts de shell é com #
. Atenha-se a isso mesmo para comentários de várias linhas. Nunca tente (ab) usar :
para comentários. Não existe um mecanismo de comentário de várias linhas dedicado no shell que seja análogo à /* */
forma de estrela de barra em C
idiomas semelhantes.
Por uma questão de completude, mas não porque é uma prática recomendada, mencionarei que é possível usar os documentos aqui para fazer "comentários" multilinhas:
: <<'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"; }