291 votes

Bloquer les commentaires dans un Shell script

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

5 votes

Il est intéressant de voir comment une question aussi simple et facile trouve des réponses trop différentes et compliquées.

398voto

sunny256 Points 3262

Dans bash :

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

El ' y ' autour de la END sont importants, sinon les éléments à l'intérieur du bloc comme par exemple $(command) sera analysé et exécuté.

Pour une explication, voir este y este question.

27 votes

Une astuce astucieuse - tant que le mot-clé "END" (qui est, bien sûr, choisi par l'utilisateur) n'apparaît pas sur une ligne à part entière à l'intérieur du matériel à commenter.

0 votes

Très bonne astuce. BTW, cela devrait aussi fonctionner dans n'importe quel shell compatible Bourne.

0 votes

@JonathanLeffler que voulez-vous dire par "qui est, bien sûr, choisi par l'utilisateur" ? Que je peux utiliser la chaîne de mon choix à la place de END ?

100voto

OscarRyz Points 82553

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

Utilisation de vi (oui, vi ) vous pouvez facilement commenter la ligne n a m

<ESC>
:10,100s/^/#/

(c'est-à-dire, de la ligne 10 à la ligne 100, remplacer le début de la ligne (^) par un signe #).

et un commentaire avec

<ESC>
:10,100s/^#//

(qui se lit, de la ligne 10 à la ligne 100 substituant le début de ligne (^) suivi de # avec notant //.)

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

1 votes

Belle astuce avec l'expression régulière sur vi pour placer le # devant les lignes.

6 votes

Juste une astuce - si vous utilisez vim et que cela finit par surligner le début de chaque ligne, ajoutez |noh à la fin. Le tuyau sépare les commandes supplémentaires et les noh est pour nohighlight. La mise en évidence des termes de recherche reprendra automatiquement lors de la prochaine recherche. Exemple : :10,100s/^/#/g|noh

0 votes

J'ai besoin que cela soit automatisé à partir d'un script. Existe-t-il un moyen de faire cela dans un fichier avec vi sans avoir besoin d'une interaction humaine ?

57voto

Dan Points 141

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

16 votes

C'est classique, mais comme stackoverflow.com/a/19409316/832230 notes, juste if [ ]; fonctionne également.

16 votes

Peut-être plus clair : if false; . stackoverflow.com/a/18019516/2097284

3 votes

Cela ne semble fonctionner que si le texte commenté est réellement du code. Je rencontre des problèmes avec les commentaires comportant des tuyaux et des points-virgules. La réponse de Sunny256 a fonctionné.

31voto

devnull Points 45016

Les éléments suivants devraient fonctionner pour sh , bash , ksh y zsh .

Les blocs de code à commenter peuvent être placés à l'intérieur des éléments suivants BEGINCOMMENT y 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"

En exécutant le code ci-dessus, on obtient :

This is outside the commented block

Afin de Décommenter les blocs de code ainsi commentés, disons

alias BEGINCOMMENT="if : ; then"

au lieu de

alias BEGINCOMMENT="if [ ]; then"

dans l'exemple ci-dessus.

15voto

stefanB Points 27796

Dans Vim :

  1. allez à la première ligne du bloc que vous voulez commenter

  2. shift-V (entrer en mode visuel), haut-bas surligner les lignes dans le bloc

  3. exécutez ce qui suit lors de la sélection :s/^/#/

  4. la commande ressemblera à ceci :

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

par exemple

shift-V
jjj
:s/^/#
<enter>

7 votes

Pour décommenter, utilisez :s/^#/

0 votes

Vérifiez la réponse de @horta : stackoverflow.com/a/28376319/3506015 - il y a encore moins de pressions sur les touches !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X