Commentaires sur les scripts shell multilignes – comment cela fonctionne-t-il?

Récemment, je suis tombé sur un type de commentaire multiligne que je navais jamais vu auparavant – voici un exemple de script:

echo a # : aaa : ddd # echo b 

Cela semble fonctionner, même la syntaxe vim le met en évidence. Comment sappelle ce style de commentaire et comment puis-je trouver plus dinformations à ce sujet?

Commentaires

  • Et si vous enveloppiez plutôt votre code dans une fonction pour commenter? CommentedOutBlock() { echo "test"; }
  • Comme dautres lont déjà mentionné, les commentaires sur plusieurs lignes ne sont pas disponibles en mode natif. Jutilise donc si faux; puis < combien de lignes vous voulez toujours > fi

Réponse

Ce nest pas un commentaire sur plusieurs lignes. # est un commentaire sur une seule ligne. : (deux-points) nest pas du tout un commentaire, mais plutôt une commande intégrée au shell qui est essentiellement un NOP , une opération nulle qui ne fait rien sauf renvoyer true, comme true (et donc définir $? à 0 comme effet secondaire). Cependant comme il sagit dune commande, il peut accepter des arguments, et comme il ignore ses arguments, dans la plupart des cas il agit superficiellement comme un commentaire. Le principal problème avec ce kludge est que les arguments sont encore développés, ce qui entraîne une foule de conséquences inattendues. Les arguments sont toujours affectés par des erreurs de syntaxe, les redirections sont toujours effectuées afin que : > file tronque file et : $(dangerous command) les substitutions seront toujours exécutées.

La manière la moins surprenante dinsérer des commentaires dans des scripts shell est avec #. Tenez-vous-en à cela même pour les commentaires sur plusieurs lignes. Nessayez jamais dutiliser (ab) : pour les commentaires. Il ny a pas de mécanisme de commentaire multiligne dédié dans le shell qui soit analogue à la forme slash-star /* */ dans les langages de type C.


Par souci dexhaustivité, mais pas parce que cest une pratique recommandée, je mentionnerai quil est possible dutiliser here-documents pour faire des « commentaires » sur plusieurs lignes:

: <<"end_long_comment" This is an abuse of the null command ":" and the here-document syntax to achieve a "multi-line comment". According to the POSIX spec linked above, if any character in the delimiter word ("end_long_comment" in this case) above is quoted, the here-document will not be expanded in any way. This is **critical**, as failing to quote the "end_long_comment" will result in the problems with unintended expansions described above. All of this text in this here-doc goes to the standard input of :, which does nothing with it, hence the effect is like a comment. There is very little point to doing this besides throwing people off. Just use "#". end_long_comment 

Commentaires

  • +1 très important pour conservez les guillemets simples sur la ligne << – qui désactive la substitution et lexpansion.
  • Et comme note supplémentaire, remplissez les scripts shell avec : pour les choses qui devraient être des commentaires entraînera une consommation supplémentaire de RAM / CPU. Cela na ‘ plus rien pour des choses simples sur votre bureau, mais si ‘ est quelque chose exécuté des centaines ou des milliers de fois par seconde, vous div id = « 188d9523f6 »>

ll ne rien faire, très vite .

  • @bahamat: si vous exécutez quelque chose de centaines ou des milliers de fois par seconde, jespère que vous avez gagné ‘ t lécrire dans le shell … = /
  • Parfois, en utilisant lutilitaire null pour plusieurs lignes de le texte peut être utile. Commencer le commentaire par : <<=cut permet d écrire du POD dans des scripts shell, voir cet exemple pour plus de détails . Cela permet dutiliser perldoc script.sh. Cependant, le commentaire multiligne montré dans cette réponse est quelque chose qui devrait certainement être un bloc de commentaire (chaque ligne commençant par # ).
  • Ici ‘ est une belle discussion sur heredocs, utilisée à la fois pour les commentaires et dautres cas dutilisation intéressants (y compris même la génération de script dynaimc): tldp.org/LDP/ abs / html / here-docs.html # EX71C
  • Réponse

    Ce nest pas nimporte quel style de commentaire. la commande intégrée : ne fait absolument rien; elle est utilisée abusivement pour commenter ici.

    $ help : :: : Null command. No effect; the command does nothing. Exit Status: Always succeeds. 

    Réponse

    Dans les premiers shells, le signe deux-points était le seul moyen de créer des commentaires.

    Cependant, ce nest pas le cas un vrai commentaire, car la ligne est analysée exactement de la même manière que toute autre commande est analysée, et cela peut avoir des effets secondaires. Par exemple:

    : ${a:=x} # assigns the value "x" to the variable, "a" : $(command) # executes "command" 

    (Parfois, le signe deux-points est utilisé uniquement dans le but dinvoquer ces effets secondaires, mais il nest pas utilisé comme commentaire.)

    Il est parfois pratique dutiliser les deux-points pour commenter une section dun script:

    : " while [ "$n" -ne "$x" ] do : whatever done " 

    Cest un excellent gain de temps en précédant chaque ligne avec #, en particulier si le commentaire nest que temporaire.

    Commentaires

    • Ce simple- La méthode de commentaire quote ne fonctionne ‘ sur aucune section de script qui utilise elle-même des guillemets simples.Et si vous utilisez des guillemets aussi proches que vous le souhaitez, cela signifie que vous ‘ aurez des guillemets simples légitimes parsemés tout au long du script. Il est tellement plus simple dutiliser nimporte quel éditeur décent qui vous permet de bloquer les commentaires par ligne.
    • Vous avez tout à fait raison que cela ne fonctionnera que sil ny a pas de guillemets simples dans la section citée. Cependant, un script na pas besoin davoir beaucoup de guillemets simples. En examinant quelques-uns de mes scripts, je les trouve relativement rares, et beaucoup pourraient être remplacés par des guillemets doubles.
    • Le choix des guillemets simples ou doubles ne devrait guère être influencé par quelque chose daussi trivial et non pertinent. se demander si le texte de votre script est lui-même une chaîne entre guillemets simples valide. Les guillemets simples sont utilisés pour empêcher les expansions, tandis que les guillemets doubles permettent certaines expansions et nécessitent une analyse supplémentaire. Cest le vrai critère pour déterminer lequel utiliser.
    • Cest de loin la manière la plus chic de le faire. Idéal pour les petits blocs de documentation. Je laime mieux que /* */ et ugh, ne ‘ ne me lancez pas sur <!-- --> !

    Réponse

    Si votre commentaire est à la fin du script, vous pouvez le faire comme ceci:

    #!/bin/sh echo "hello world" exec true we can put whatever we want here \"\"\$\`!#%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ abcdefghijklmnopqrstuvwxyz{|}~ 

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *