Como colocar um comentário de linha para um comando de várias linhas

Eu sei como escrever um comando multi-linha em um script Bash, mas como posso adicionar um comentário para cada linha em um comando de múltiplas linhas?

CommandName InputFiles \ # This is the comment for the 1st line --option1 arg1 \ # This is the comment for the 2nd line --option2 arg2 # This is the comment for the 3nd line 

Mas infelizmente, o comentário após o caractere de continuação \ irá quebrar o comando.

Temo que, em geral, você não pode fazer o que está pedindo. O melhor que você pode fazer é comentar as linhas antes do comando, ou um único comentário no final da linha de comando, ou um comentário após o comando.

Você não pode conseguir intercalar comentários dentro de um comando dessa maneira. Os \ s expressam a intenção de mesclar linhas, então, para todos os efeitos, você está tentando intercalar comentários em uma única linha, o que não funciona de qualquer maneira, porque \ tem que estar no final da linha para ter esse efeito. .

É assim que eu faço. Essencialmente, usando a substituição do comando backtick do Bash, é possível colocar esses comentários em qualquer lugar ao longo de uma longa linha de comando, mesmo que seja dividido em linhas. Eu coloquei o comando echo na frente do seu exemplo para que você possa executar o exemplo e ver como ele funciona:

 echo CommandName InputFiles `#1st comment` \ --option1 arg1 `#2nd comment` \ --option2 arg2 `#3rd comment` 

Outro exemplo onde você pode colocar vários comentários em pontos diferentes em uma linha:

 some_cmd --opt1 `#1st comment` --opt2 `#2nd comment` --opt3 `#3rd comment` 

Você poderia armazenar os argumentos em uma matriz:

 args=(InputFiles # This is the comment for the 1st line # You can have whole lines of comments in between, useful for: #--deprecated-option # This isn't use any more --option1 arg1 # This is the comment for the 2nd line # And even blank lines in between for readability --option2 arg2 # This is the comment for the 3nd line ) CommandName "${args[@]}" 

No entanto, acho que isso parece um pouco trabalhoso se for apenas com o propósito de permitir comentários para cada argumento. Portanto, eu apenas rewriteei o comentário para que ele se refira aos argumentos individuais e coloque-o acima do comando inteiro.

Com base no comentário de pjh para uma outra resposta a essa pergunta , substituindo o IFS por uma variável que não contém caracteres que não sejam espaços em branco.

 comment= who ${comment# This is the command} \ -u ${comment# This is the argument}