Como posso comentar em cada linha das seguintes linhas de um script?
cat ${MYSQLDUMP} | \
sed '1d' | \
tr ",;" "\n" | \
sed -e 's/[asbi]:[0-9]*[:]*//g' -e '/^[{}]/d' -e 's/""//g' -e '/^"{/d' | \
sed -n -e '/^"/p' -e '/^print_value$/,/^option_id$/p' | \
sed -e '/^option_id/d' -e '/^print_value/d' -e 's/^"\(.*\)"$/\1/' | \
tr "\n" "," | \
sed -e 's/,\([0-9]*-[0-9]*-[0-9]*\)/\n\1/g' -e 's/,$//' | \
sed -e 's/^/"/g' -e 's/$/"/g' -e 's/,/","/g' >> ${CSV}
Se eu tentar adicionar um comentário como:
cat ${MYSQLDUMP} | \ # Output MYSQLDUMP File
Eu recebo:
#: not found
É possível comentar aqui?
Respostas:
Isso terá alguma sobrecarga, mas tecnicamente ele responde à sua pergunta:
E para tubulações especificamente, há uma solução limpa sem custos indiretos:
Consulte a pergunta Estouro de pilha Como colocar um comentário de linha para um comando de várias linhas .
fonte
A barra invertida à direita deve ser o último caractere na linha para ser interpretada como um comando de continuação. Nenhum comentário ou mesmo espaço em branco é permitido depois dele.
Você deve poder colocar linhas de comentário entre seus comandos
fonte
|
. Se você tentarcat file1\<newline>#comment<newline>file2
, verá que não conseguecat file1 file2
, mas simcat file1; file2
.cat file1 | # comment<newline>sort
funciona bem. O mesmo acontececat file1 && # comment<newline>echo foo
. Portanto, os comentários podem ser incluídos após|
ou&&
ou||
, mas não após `\` ou no meio de um comando.Como o DigitalRoss apontou, a barra invertida à direita não é necessária quando a linha termina
|
. E você pode colocar comentários em uma linha após um|
:fonte
A barra invertida escapa o #, interpretando-o como seu caractere literal em vez de um caractere de comentário.
fonte
$IFS
comentar hacksEsse hack usa a expansão de parâmetro on
$IFS
, que é usada para separar palavras em comandos:Similarmente:
Usando isso, você pode colocar um comentário em uma linha de comando com contination:
mas o comentário precisará ser anterior à
\
continuação.Observe que a expansão do parâmetro é realizada dentro do comentário:
Exceção rara
O único caso raro em que isso falha é se
$IFS
iniciado anteriormente com o texto exato que é removido via expansão (ou seja, após o#
caractere):Observe que a final
foobar
não tem espaço, ilustrando o problema.Como
$IFS
contém apenas espaço em branco por padrão, é extremamente improvável que você encontre esse problema.Crédito para comentário de @ PJH que desencadeou esta resposta.
fonte
Além dos exemplos da DigitalRoss, aqui está outro formulário que você pode usar, se preferir, em
$()
vez de backticks`
Obviamente, você também pode usar a sintaxe do cólon com backticks:
Notas Adicionais
A razão
$(#comment)
não funciona é porque uma vez que ele vê o#
, trata o resto da linha como comentários, incluindo os parênteses de fechamento:comment)
. Portanto, os parênteses nunca são fechados.Os backticks são analisados de maneira diferente e detectam o backtick de fechamento mesmo após a
#
.fonte
Aqui está um script bash que combina as idéias e idiomas de vários comentários anteriores para fornecer, com exemplos, comentários embutidos com a forma geral
${__+ <comment text>}
.Em particular
<comment text>
pode ser multi-linha<comment text>
não é expandido por parâmetroHá uma restrição sobre
<comment text>
, a saber, chaves'}'
e parênteses desequilibrados')'
devem ser protegidos (ou seja,'\}'
e'\)'
).Há um requisito no ambiente local do bash:
__
deve estar desmarcadoQualquer outro nome de parâmetro bash sintaticamente válido servirá no lugar de
__
, desde que o nome não tenha um valor definido.Um script de exemplo segue
fonte