Bloquer les commentaires dans un script shell

Existe-t-il un moyen simple de commenter un bloc de code dans un script shell?

En bash:

#!/bin/bash echo before comment : <<'END' bla bla blurfl END echo after comment 

Le ' et ' autour du délimiteur END sont importants, sinon les choses à l'intérieur du bloc comme par exemple $(command) seront analysées et exécutées.

Pour une explication, voir ceci et cette question.

Il n’y a pas de commentaire de bloc sur le script shell.

En utilisant vi (oui, vi ), vous pouvez facilement commenter de la ligne n à m

  :10,100s/^/#/ 

(qui lit, à partir de la ligne 10 à 100, le début de la ligne de remplacement (^) par un signe #).

et un commentaire avec

  :10,100s/^#// 

(qui lit, à partir de la ligne 10 à 100, le début de la ligne de remplacement (^) suivi de # avec la mention //.)

vi est presque universel partout où il y a /bin/sh .

Vous pouvez utiliser:

 if [ 1 -eq 0 ]; then echo "The code that you want commented out goes here." echo "This echo statement will not be called." fi 

Ce qui suit devrait fonctionner pour sh , bash , ksh et zsh .

Les blocs de code à commenter peuvent être placés dans BEGINCOMMENT et ENDCOMMENT :

 [ -z $BASH ] || shopt -s expand_aliases alias BEGINCOMMENT="if [ ]; then" alias ENDCOMMENT="fi" BEGINCOMMENT echo "This line appears in a commented block" echo "And this one too!" ENDCOMMENT echo "This is outside the commented block" 

L’exécution du code ci-dessus entraînerait:

 This is outside the commented block 

Pour décommenter les blocs de code ainsi commentés, dites

 alias BEGINCOMMENT="if : ; then" 

au lieu de

 alias BEGINCOMMENT="if [ ]; then" 

dans l’exemple ci-dessus.

si vous pouvez éviter les guillemets simples:

 __=' blah blah comment. ' 

Dans Vim:

  1. aller à la première ligne de bloc que vous voulez commenter
  2. shift-V (entrer en mode visuel), lignes de surbrillance en bas
  3. exécuter les opérations suivantes sur la sélection :s/^/#/
  4. la commande ressemblera à ceci:

      :'<,'>s/^/# 
  5. appuyez sur Entrée

par exemple

 shift-V jjj :s/^/#  

Vous pouvez utiliser le mode Visual Block de Vi / Vim qui est conçu pour des choses comme ceci:

 Ctrl-V Highlight first element in rows you want commented Shift-i # esc 

Uncomment serait:

 Ctrl-V Highlight #'sdl 

C’est la façon interactive de vi de faire ce genre de choses plutôt que de compter ou de lire les numéros de ligne.

Enfin, dans Gvim, vous utilisez ctrl-q pour entrer dans le mode Visual Block plutôt que ctrl-v (car c’est le raccourci pour coller).

Tant de sur-ingénierie …

Je considère comme une mauvaise pratique d’écrire du code actif pour générer du code passif.

Ma solution: la plupart des éditeurs ont un mode de sélection de bloc. Utilisez-le simplement pour append # à toutes les lignes que vous souhaitez commenter. Quel est le problème?

Exemple de bloc-notes:

Pour créer: Alt-MousedRag, appuyez sur #.

Pour supprimer: Alt-MousedRag, Maj-Droite, Supprimer.

Une variante de l’astuce here-doc dans la réponse acceptée par sunny256 consiste à utiliser les mots-clés Perl pour les commentaires. Si vos commentaires sont en fait une sorte de documentation, vous pouvez alors commencer à utiliser la syntaxe Perl dans le bloc commenté, ce qui vous permet de l’imprimer correctement, de le convertir en page de manuel, etc.

En ce qui concerne le shell, il suffit de remplacer 'END' par '=cut' .

 echo "before comment" : <<'=cut' =pod =head1 NAME podtest.sh - Example shell script with embedded POD documentation etc. =cut echo "after comment" 

(Trouvé sur " Incorporation de la documentation dans le script shell ")