Os comentários terminam na primeira nova linha (consulte regra de reconhecimento de token de shell 10 ), sem permitir linhas de continuação , então esse código tem foo
em uma linha de comando separada:
echo # this is a comment \
foo
Quanto à sua primeira proposta, a barra invertida não é seguida por uma nova linha, você está apenas citando o espaço: é equivalente a
echo ' # this is a comment'
foo
$(: this is a comment)
substitui a saída do comando : this is a comment
. Se a saída desse comando estiver vazia, isso é efetivamente uma maneira altamente confusa de inserir um comentário no meio de uma linha.
Não há mágica acontecendo: :
é um comando comum, o utilitário cólon que não faz nada. O utilitário de dois pontos é mais útil quando a sintaxe do shell requer um comando, mas você não tem nada para fazer.
# Sample code to compress files that don't look compressed
case "$1" in
*.gz|*.tgz|*.bz2|*.zip|*.jar|*.od?) :;; # the file is already compressed
*) bzip2 -9 "$1";;
esac
Outro caso de uso é um idioma para definir uma variável, se ela ainda não estiver definida.
: "${foo:=default value}"
A observação sobre o goto é histórica. O utilitário de cólon é datado antes mesmo do Bourne shell , até o Bomba do Thompson , que tinha uma instrução ir . O cólon então significava um rótulo; dois-pontos é uma sintaxe bastante comum para rótulos goto (ainda está presente em sed ).