Süßer Trick - solange das Schlüsselwort 'END' (das natürlich vom Benutzer ausgewählt wird) nicht in einer eigenen Zeile innerhalb des zu kommentierenden Materials erscheint.
Jonathan Leffler
9
@kalengi: Ja; Das in den Anführungszeichen verwendete Wort kann alles Bequeme sein. EOFist ein klassisches Beispiel (und so ist !, ein Ausrufezeichen auf eigenem), aber man konnte verwenden SNURFLE_BURGERSoder classical_end_markeroder im kommentierten-out anderen Wort , das auf seinem eigenen nicht Material auf eine Linie erscheinen. Ich würde nicht gerne mit Räumen usw. experimentieren, aber das Wort könnte auch mit ihnen funktionieren.
Jonathan Leffler
4
Es funktioniert definitiv, aber kann jemand näher erläutern, wie dies funktioniert? Danke
mbbce
5
@MB_CE, siehe stackoverflow.com/questions/32126653/… . Das heißt - es wird ein Befehl ( :) ausgeführt, der seine Eingabe nicht liest und immer mit einem erfolgreichen Wert beendet wird, und der "Kommentar" wird als Eingabe gesendet. Nicht viel dazu.
Charles Duffy
2
Ich finde es unglaublich hässlich und verwirrend, aktiven Code zu schreiben, um passiven Code zu erstellen ... benutze einfach den guten alten Blockauswahlmodus und drücke #; Was ist das große Problem dabei?
Rusty75
90
Es gibt keinen Blockkommentar zum Shell-Skript.
Mit vi(Ja vi) können Sie leicht von Zeile n bis m kommentieren
<ESC>:10,100s/^/#/
(das heißt, von Zeile 10 bis 100 ersetzen Sie den Zeilenanfang (^) mit einem # -Zeichen.)
und un Kommentar mit
<ESC>:10,100s/^#//
(das heißt, von Zeile 10 bis 100 Ersatzzeilenstart (^) gefolgt von # mit der Angabe //.)
Netter Trick mit regulärem Ausdruck auf vi, um # vor Zeilen zu setzen.
Atiq Rahman
5
Nur ein Tipp - wenn Sie vim verwenden und dadurch der Anfang jeder Zeile hervorgehoben wird, fügen Sie ihn |noham Ende hinzu. Die Pipe trennt zusätzliche Befehle und nohist für Nohighlight. Die Hervorhebung von Suchbegriffen wird automatisch fortgesetzt, wenn Sie das nächste Mal nach etwas suchen. Beispiel::10,100s/^/#/g|noh
Matthew
Ich brauche dies, um von einem Skript aus automatisiert zu werden. Gibt es eine Möglichkeit, dies mit einer Datei mit vi zu tun, ohne dass eine menschliche Interaktion erforderlich ist?
Timothy Swan
1
@ TimothySwan Ich stelle mir vor, das Gawk- oder Sed-Programm könnte das tun ... irgendwie.
BeowulfNode42
Meine bevorzugte Methode zum Kommentieren (oder Präfixieren) eines Blocks mit vi: Gehen Sie zum Anfang der Zeile, in der Sie mit dem Kommentieren beginnen möchten (z. B. <SHIFT>+G 10 <ENTER>dann 0oder auf eine andere Art zu navigieren). Dann benutze<CTRL>+V um in den visuellen Blockmodus zu wechseln und den Anfang aller Zeilen zu markieren, die Sie kommentieren möchten (in diesem Beispiel 90 J). Drücken Sie dann SHIFT+I, um vor dem markierten Block einzufügen. Geben Sie das Kommentarzeichen ein (z. B. #) und drücken Sie <ESC>, um das Präfix zu beenden. Diese Erklärung klingt sehr lang, ist aber meiner Erfahrung nach in der Praxis viel schneller.
Ueffes
52
Sie können verwenden:
if[1-eq 0];then
echo "The code that you want commented out goes here."
echo "This echo statement will not be called."fi
Dies scheint nur zu funktionieren, wenn der kommentierte Text tatsächlich Code ist. Ich habe Probleme mit Kommentaren mit Pipes und Semikolons. Sunny256 Antwort hat funktioniert.
Swdev
noch prägnanter wäre []; mit Test, der ist
Justin Duncan
27
Die folgende Beschreibung ist für Arbeit sh, bash,ksh und zsh.
Die zu kommentierenden Codeblöcke können eingefügt werden BEGINCOMMENTund 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"
Das Ausführen des obigen Codes würde führen zu:
This is outside the commented block
Um Kommentar- der Codeblöcke so kommentiert, sagen wir
Ich mag das. Was bedeutet der doppelte Unterstrich? Soweit ich das beurteilen kann, handelt es sich nur um einen Variablennamen nach der Konvention, dass er als privat behandelt werden soll.
Schachofnerd
Bietet auch Syntaxhervorhebung in den meisten Editoren und kann bei Bedarf mit $ __ aufgerufen werden, obwohl ich aus Gründen der Übersichtlichkeit einen Variablennamen wie Dokumentation oder Dokumente vorschlagen würde.
Um ehrlich zu sein, warum so viel Überentwicklung ...
Ich halte es für eine schlechte Praxis, aktiven Code zum Generieren von passivem Code zu schreiben.
Meine Lösung: Die meisten Editoren haben den Blockauswahlmodus. Verwenden Sie es einfach, um allen Zeilen, die Sie auskommentieren möchten, # hinzuzufügen. Was ist die große Sache ...
Beispiel für einen Notizblock:
So erstellen Sie: Drücken Sie bei gedrückter Alt-Taste nach unten #.
So löschen Sie: Alt-Mousedrag nach unten, Pfeil nach rechts, Löschen.
Der Benutzer befindet sich höchstwahrscheinlich im Terminal. Kann keine Mausumgebung annehmen.
Gary
Existieren sie noch? Normalerweise bearbeite ich im grafischen Modus und füge es mit vi wieder ein. Das wäre eine einfache Problemumgehung.
Rusty75
2
Eine Variation des Here-Doc-Tricks in der akzeptierten Antwort von sunny256 besteht darin, die Perl-Schlüsselwörter für Kommentare zu verwenden. Wenn es sich bei Ihren Kommentaren tatsächlich um eine Art Dokumentation handelt, können Sie die Perl-Syntax im kommentierten Block verwenden, mit der Sie sie gut formatiert ausdrucken, in eine Manpage konvertieren usw. können.
Soweit die Schale betrifft, so müssen Sie nur ersetzen , 'END'mit '=cut'.
echo "before comment":<<'=cut'=pod
=head1 NAME
podtest.sh -Example shell script with embedded POD documentation
etc.=cut
echo "after comment"
Das '##' hilft mir dabei, den Anfang und das Ende des Blockkommentars leicht zu finden. Ich kann eine Nummer nach dem '##' setzen, wenn ich ein paar davon habe. Um den Kommentar auszuschalten, stecke ich einfach eine '1' in das '[]'. Ich vermeide auch einige Probleme, die ich mit einfachen Anführungszeichen im kommentierten Block hatte.
Antworten:
In Bash:
Das
'
und'
um dasEND
Trennzeichen sind wichtig, andernfalls werden Dinge innerhalb des Blocks, wie zum Beispiel$(command)
, analysiert und ausgeführt.Eine Erklärung finden Sie in dieser und dieser Frage.
quelle
EOF
ist ein klassisches Beispiel (und so ist!
, ein Ausrufezeichen auf eigenem), aber man konnte verwendenSNURFLE_BURGERS
oderclassical_end_marker
oder im kommentierten-out anderen Wort , das auf seinem eigenen nicht Material auf eine Linie erscheinen. Ich würde nicht gerne mit Räumen usw. experimentieren, aber das Wort könnte auch mit ihnen funktionieren.:
) ausgeführt, der seine Eingabe nicht liest und immer mit einem erfolgreichen Wert beendet wird, und der "Kommentar" wird als Eingabe gesendet. Nicht viel dazu.Es gibt keinen Blockkommentar zum Shell-Skript.
Mit
vi
(Javi
) können Sie leicht von Zeile n bis m kommentieren(das heißt, von Zeile 10 bis 100 ersetzen Sie den Zeilenanfang (^) mit einem # -Zeichen.)
und un Kommentar mit
(das heißt, von Zeile 10 bis 100 Ersatzzeilenstart (^) gefolgt von # mit der Angabe //.)
vi
ist fast universell, wo immer es gibt/bin/sh
.quelle
|noh
am Ende hinzu. Die Pipe trennt zusätzliche Befehle undnoh
ist für Nohighlight. Die Hervorhebung von Suchbegriffen wird automatisch fortgesetzt, wenn Sie das nächste Mal nach etwas suchen. Beispiel::10,100s/^/#/g|noh
<SHIFT>+G 10 <ENTER>
dann0
oder auf eine andere Art zu navigieren). Dann benutze<CTRL>+V
um in den visuellen Blockmodus zu wechseln und den Anfang aller Zeilen zu markieren, die Sie kommentieren möchten (in diesem Beispiel90 J
). Drücken Sie dannSHIFT+I
, um vor dem markierten Block einzufügen. Geben Sie das Kommentarzeichen ein (z. B.#
) und drücken Sie<ESC>
, um das Präfix zu beenden. Diese Erklärung klingt sehr lang, ist aber meiner Erfahrung nach in der Praxis viel schneller.Sie können verwenden:
quelle
if [ ];
auch.if false;
. stackoverflow.com/a/18019516/2097284Die folgende Beschreibung ist für Arbeit
sh
,bash
,ksh
undzsh
.Die zu kommentierenden Codeblöcke können eingefügt werden
BEGINCOMMENT
undENDCOMMENT
:Das Ausführen des obigen Codes würde führen zu:
Um Kommentar- der Codeblöcke so kommentiert, sagen wir
anstatt
im obigen Beispiel.
quelle
Wenn Sie den einfachen Anführungszeichen ausweichen können:
quelle
Verwenden Sie
: '
zu öffnen und'
zu schließen.Beispielsweise:
Dies ist aus Vegas Beispiel hier
quelle
In Vim:
shift-V
(in den visuellen Modus wechseln), Markierungslinien im Block nach oben und unten markieren:s/^/#/
Der Befehl sieht folgendermaßen aus:
drücke Enter
z.B
quelle
:s/^#/
Sie können den Visual Block-Modus von Vi / Vim verwenden, der für folgende Dinge entwickelt wurde:
Kommentar wäre:
Dies ist die interaktive Methode von vi, um solche Dinge zu tun, anstatt Zeilennummern zu zählen oder zu lesen.
Schließlich verwenden Sie in Gvim Strg-Q, um in den Visual Block-Modus zu gelangen, anstatt Strg-V (da dies die Verknüpfung zum Einfügen ist).
quelle
Um ehrlich zu sein, warum so viel Überentwicklung ...
Ich halte es für eine schlechte Praxis, aktiven Code zum Generieren von passivem Code zu schreiben.
Meine Lösung: Die meisten Editoren haben den Blockauswahlmodus. Verwenden Sie es einfach, um allen Zeilen, die Sie auskommentieren möchten, # hinzuzufügen. Was ist die große Sache ...
Beispiel für einen Notizblock:
So erstellen Sie: Drücken Sie bei gedrückter Alt-Taste nach unten #.
So löschen Sie: Alt-Mousedrag nach unten, Pfeil nach rechts, Löschen.
quelle
Eine Variation des Here-Doc-Tricks in der akzeptierten Antwort von sunny256 besteht darin, die Perl-Schlüsselwörter für Kommentare zu verwenden. Wenn es sich bei Ihren Kommentaren tatsächlich um eine Art Dokumentation handelt, können Sie die Perl-Syntax im kommentierten Block verwenden, mit der Sie sie gut formatiert ausdrucken, in eine Manpage konvertieren usw. können.
Soweit die Schale betrifft, so müssen Sie nur ersetzen ,
'END'
mit'=cut'
.(Gefunden unter " Einbetten der Dokumentation in ein Shell-Skript ")
quelle
Ein anderer Modus ist: Wenn Ihr Editor KEINE BLOCK-Kommentaroption hat,
GETAN
es funktioniert mit jedem Editor
quelle
Ich mag eine einzelne Zeile öffnen und schließen:
Das '##' hilft mir dabei, den Anfang und das Ende des Blockkommentars leicht zu finden. Ich kann eine Nummer nach dem '##' setzen, wenn ich ein paar davon habe. Um den Kommentar auszuschalten, stecke ich einfach eine '1' in das '[]'. Ich vermeide auch einige Probleme, die ich mit einfachen Anführungszeichen im kommentierten Block hatte.
quelle