Comment placer un commentaire de ligne pour une commande multiligne

Je sais comment écrire une commande multiligne dans un script Bash, mais comment puis-je append un commentaire pour chaque ligne dans une commande multiligne?

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 

Mais malheureusement, le commentaire après le caractère de continuation \ brisera la commande.

J’ai peur qu’en général vous ne puissiez pas faire ce que vous demandez. Le mieux que vous puissiez faire est un commentaire sur les lignes avant la commande, ou un seul commentaire à la fin de la ligne de commande, ou un commentaire après la commande.

Vous ne pouvez pas réussir à intercaler les commentaires à l’intérieur d’une commande de cette façon. Le \ s exprime une intention de fusionner des lignes, donc à toutes fins utiles, vous essayez d’intégrer des commentaires dans une seule ligne, ce qui ne fonctionne pas du tout car un \ doit être à la fin de la ligne pour avoir cet effet .

C’est comme ça que je le fais. Essentiellement, en utilisant la substitution de commande backtick de Bash, on peut placer ces commentaires n’importe où sur une longue ligne de commande, même si elle est divisée en plusieurs lignes. J’ai mis la commande echo devant votre exemple pour que vous puissiez exécuter l’exemple et voir comment cela fonctionne:

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

Un autre exemple où vous pouvez placer plusieurs commentaires à différents points sur une seule ligne:

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

Vous pouvez stocker les arguments dans un tableau:

 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[@]}" 

Cependant, je pense que cela semble un peu piraté si c’est uniquement dans le but de permettre des commentaires pour chaque argument. Je voudrais donc réécrire le commentaire pour qu’il renvoie les arguments individuels et les placer au-dessus de la commande entière.

Basé sur le commentaire de pjh à une autre réponse à cette question , remplacer IFS par une variable connue pour ne pas contenir de caractères non blancs.

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