Kommentare zu mehrzeiligen Shell-Skripten – wie funktioniert das?

Kürzlich bin ich auf einen mehrzeiligen Kommentartyp gestoßen, den ich noch nie gesehen habe – hier ein Skriptbeispiel:

echo a # : aaa : ddd # echo b 

Dies scheint zu funktionieren, selbst die vim -Syntax hebt es hervor. Wie heißt diese Art des Kommentierens und wie finde ich weitere Informationen dazu?

Kommentare

  • Was ist, wenn Sie stattdessen Ihren Code in Funktion umbrechen auskommentieren? CommentedOutBlock() { echo "test"; }
  • Wie andere bereits erwähnt haben, sind mehrzeilige Kommentare nicht nativ verfügbar. Also benutze ich wenn falsch; dann < wie viele Zeilen Sie jemals möchten > fi

Antwort

Das ist kein mehrzeiliger Kommentar. # ist ein einzeiliger Kommentar. : (Doppelpunkt) ist überhaupt kein Kommentar, sondern ein in die Shell integrierter Befehl, der im Grunde genommen ein NOP , eine Nulloperation, die nichts anderes tut, als true zurückzugeben, wie true (und damit $? bis 0 als Nebeneffekt). Da es sich jedoch um einen Befehl handelt, kann er Argumente akzeptieren, und da er seine Argumente ignoriert, verhält er sich in den meisten Fällen oberflächlich wie ein Kommentar. Das Hauptproblem bei diesem Kludge ist, dass die Argumente immer noch erweitert werden, was zu einer Vielzahl unbeabsichtigter Konsequenzen führt. Die Argumente sind weiterhin von Syntaxfehlern betroffen. Umleitungen werden weiterhin ausgeführt, sodass : > file file und : $(dangerous command) Ersetzungen werden weiterhin ausgeführt.

Die am wenigsten überraschende und absolut sichere Möglichkeit, Kommentare in Shell-Skripte einzufügen, ist #. Halten Sie sich auch bei mehrzeiligen Kommentaren daran. Versuchen Sie niemals , : für Kommentare (ab) zu verwenden. In der Shell gibt es keinen dedizierten mehrzeiligen Kommentarmechanismus, der dem Schrägstrich /* */ in C -ähnlichen Sprachen entspricht.


Der Vollständigkeit halber, aber nicht, weil dies empfohlen wird, möchte ich erwähnen, dass es möglich ist, hier-Dokumente um mehrzeilige „Kommentare“ zu erstellen:

: <<"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 

Kommentare

  • +1 sehr wichtig für Behalten Sie die einfachen Anführungszeichen in der Zeile << bei – dies deaktiviert das Ersetzen und Erweitern.
  • Und als zusätzliche Anmerkung füllen Sie Shell-Skripte mit : für Dinge, die Kommentare sein sollten, verursacht zusätzlichen RAM / CPU-Verbrauch. ‚ spielt für einfache Dinge auf Ihrem Desktop keine Rolle, aber wenn es ‚ ist, wird etwas hunderte oder tausende Male pro Sekunde ausgeführt ‚ ll tut nichts, mächtig schnell .
  • @bahamat: Wenn Sie Hunderte ausführen oder tausende Male pro Sekunde hoffe ich, dass Sie ‚ nicht in die Shell schreiben … = /
  • Manchmal verwenden Sie das Dienstprogramm null für mehrere Zeilen von Text kann nützlich sein. Wenn Sie den Kommentar mit : <<=cut beginnen, können Sie POD in Shell-Skripten schreiben. Weitere Informationen finden Sie in diesem Beispiel . Dies ermöglicht die Verwendung von perldoc script.sh. Der in dieser Antwort gezeigte mehrzeilige Kommentar sollte jedoch definitiv ein Kommentarblock sein (jede Zeile beginnt mit # ).
  • Hier ‚ ist eine nette Diskussion über Heredocs, die sowohl für Kommentare als auch für andere interessante Anwendungsfälle (einschließlich der Generierung von Dynaimc-Skripten) verwendet wird: tldp.org/LDP/ abs / html / here-docs.html # EX71C

Antwort

Ist es nicht Jede Art des Kommentierens. Der integrierte Befehl : bewirkt absolut nichts. Er wird hier zum Kommentieren missbraucht.

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

Antwort

In frühen Shells war der Doppelpunkt die einzige Möglichkeit, Kommentare zu erstellen.

Dies ist jedoch nicht der Fall Ein wahrer Kommentar, da die Zeile genauso analysiert wird wie jeder andere Befehl, und dies kann Nebenwirkungen haben. Beispiel:

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

(Manchmal wird der Doppelpunkt nur zum Aufrufen dieser Nebenwirkungen verwendet, aber dann wird er nicht als Kommentar verwendet.)

Manchmal ist es zweckmäßig, einen Abschnitt eines Skripts mit dem Doppelpunkt zu kommentieren:

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

Dies ist eine große Zeitersparnis gegenüber den einzelnen Abschnitten Zeile mit #, insbesondere wenn das Auskommentieren nur vorübergehend ist.

Kommentare

  • Diese Single- Die Methode zum Kommentieren von Anführungszeichen funktioniert ‚ in keinem Skriptabschnitt, der selbst einfache Anführungszeichen verwendet.Und wenn Sie Anführungszeichen in der Nähe von so viel verwenden, wie Sie sollten, bedeutet dies, dass Sie ‚ legitime einfache Anführungszeichen im gesamten Skript haben. Es ist so viel einfacher, nur einen anständigen Editor zu verwenden, mit dem Sie zeilenweise Kommentare blockieren können.
  • Sie haben völlig Recht, dass dies nur funktioniert, wenn der zitierte Abschnitt keine einfachen Anführungszeichen enthält. Ein Skript muss jedoch nicht viele einfache Anführungszeichen enthalten. Wenn ich mir einige meiner Skripte ansehe, finde ich sie relativ spärlich, und viele könnten durch doppelte Anführungszeichen ersetzt werden.
  • Die Wahl zwischen einfachen Anführungszeichen oder doppelten Anführungszeichen sollte kaum von etwas so Trivialem und Irrelevantem beeinflusst werden Bedenken Sie, ob der Text Ihres Skripts selbst eine gültige Zeichenfolge in einfachen Anführungszeichen ist. Einfache Anführungszeichen werden verwendet, um Erweiterungen zu verhindern, während doppelte Anführungszeichen bestimmte Erweiterungen zulassen und zusätzliche Analyse erfordern. Dies ist das eigentliche Kriterium für die Bestimmung der zu verwendenden Methode.
  • Dies ist bei weitem die schickste Methode. Ideal für kleine Dokumentationsblöcke. Ich mag es besser als /* */ und ugh, ‚ bringt mich nicht dazu, <!-- --> zu starten !

Antwort

Wenn sich Ihr Kommentar am Ende des Skripts befindet, können Sie dies folgendermaßen tun:

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.