Cómo poner un comentario de línea para un comando de varias líneas

Sé cómo escribir un comando de varias líneas en un script de Bash, pero ¿cómo puedo agregar un comentario para cada línea en un comando de varias líneas?

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 

Pero desafortunadamente, el comentario después del carácter de continuación \ romperá el comando.

Me temo que, en general, no puedes hacer lo que estás pidiendo. Lo mejor que puede hacer es un comentario en las líneas antes del comando, o un solo comentario al final de la línea de comando, o un comentario después del comando.

No puede administrar intercalar comentarios dentro de un comando de esta manera. El objective es unir líneas, por lo que intentas intercalar comentarios en una sola línea, lo que no funciona de todos modos porque un \ debe estar al final de la línea para tener ese efecto. .

Así es como lo hago. Esencialmente, al usar la sustitución del comando Backhick de Bash uno puede colocar estos comentarios en cualquier lugar a lo largo de una larga línea de comando, incluso si está dividido en líneas. He puesto el comando echo delante de tu ejemplo para que puedas ejecutar el ejemplo y ver cómo funciona:

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

Otro ejemplo donde puedes poner comentarios múltiples en diferentes puntos en una línea:

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

Puede almacenar los argumentos en una 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[@]}" 

Sin embargo, creo que esto parece un poco hackish si solo tiene el propósito de permitir comentarios para cada argumento. Por lo tanto, simplemente volvería a escribir el comentario para que haga referencia a los argumentos individuales y lo coloque por encima de todo el comando.

Basado en el comentario de pjh a otra respuesta a esta pregunta , reemplazando IFS con una variable que se sabe que no contiene caracteres que no sean espacios en blanco.

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