Ich habe mich gefragt, ob es eine Möglichkeit gibt, Zeilen in einem Shell-Skript auszukommentieren ... Wie kann ich das tun? Wir können/* */in anderen Programmiersprachen verwenden. Dies ist am nützlichsten, wenn ich ein anderes Skript konvertiere/verwende/modifiziere
Es scheint ein mühseliger Job zu sein, # für alle Zeilen zu finden, die nicht verwendet werden, und ein Präfix #.
Nehmen wir an, es gibt 100 Zeilen im Skript in aufeinanderfolgenden Zeilen, die nicht verwendet werden sollen . Ich möchte sie alle auf einmal kommentieren. Ist das möglich?
if false
then
...code...
fi
false
gibt immer false zurück, sodass der Code immer übersprungen wird.
Die vielseitigste und sicherste Methode ist, den Kommentar in ein Leerzeichen zu setzen. _.here-document
wie folgt:
<<"COMMENT"
This long comment text includes ${parameter:=expansion}
`command substitution` and $((arithmetic++ + --expansion)).
COMMENT
Das oben angegebene Begrenzungszeichen COMMENT
muss zitiert werden, um zu verhindern, dass Parameter Erweiterung, Befehlssubstitution und arithmetische Erweiterung ausgeführt werden. Andernfalls, da das Bash-Handbuch states und der POSIX Shell-Standard angeben.
In dem obigen Fall würde das Nicht-Anführen von COMMENT
dazu führen, dass der Variable parameter
Der Text expansion
zugewiesen wird. Wenn sie leer oder nicht gesetzt ist, wird der Befehl command substitution
ausgeführt, die Variable arithmetic
inkrementiert und die Variable expansion
dekrementiert.
Vergleich anderer Lösungen dazu:
Die Verwendung von if false; then comment text fi
setzt voraus, dass der Kommentartext __ syntaktisch korrekter Bash-Code ist, wohingegen natürliche Kommentare oft nicht gelten, wenn __ nur für mögliche unsymmetrische Apostrophe. Dasselbe gilt für : || { comment text }
Konstrukt.
Das Einfügen von Kommentaren in ein ungültiges Befehlsargument mit einfachen Anführungszeichen, wie in :'comment
text'
, hat den Nachteil, dass keine Apostrophe eingefügt werden können. Doppelt zitierte -Argumente, wie in :"comment text"
, unterliegen weiterhin der Parametererweiterung, Befehlsersetzung und Arithmetikerweiterung, was dem Inhalt des hier nicht genannten _ Dokumentes entspricht und zu den oben beschriebenen Nebenwirkungen führen kann.
Die Verwendung von Skripten und Editorfunktionen, um jeder Zeile in einem Block automatisch ein '#' vorangestellt zu werden, hat einige Vorteile, beantwortet die Frage jedoch nicht genau.
Sie können auch mehrzeilige Kommentare einfügen mit:
: '
comment1comment1
comment2comment2
comment3comment3
comment4comment4
'
Gemäß der Bash-Referenz für Bourne-Shell-Builtins
: (ein Doppelpunkt)
: [Argumente]
Tun Sie nichts weiter als Argumente erweitern und Weiterleitungen durchführen. Der Rückgabestatus ist Null.
Vielen Dank an Ikram für diesen Hinweis im Post Shell-Skript mit mehrzeiligem Kommentar
Sie können ein "Here" -Dokument ohne Befehl zum Senden an dieses Dokument verwenden.
#!/bin/bash
echo "Say Something"
<<COMMENT1
your comment 1
comment 2
blah
COMMENT1
echo "Do something else"
Texteditoren verfügen über eine erstaunliche Funktion namens Suchen und Ersetzen. Sie sagen nicht, welchen Editor Sie verwenden, aber da Shell-Skripts normalerweise * nix sind und ich VI verwende, können Sie die Zeilen 20 bis 50 eines Shell-Skripts kommentieren:
:20,50s/^/#/
: || {
your code here
your code here
your code here
your code here
}
Nach dieser Seite :
#!/bin/bash
foo=bar
: '
This is a test comment
Author foo bar
Released under GNU
'
echo "Init..."
# rest of script
Was ist, wenn Sie Ihren Code einfach in die Funktion einpacken?
Also das:
cd ~/documents
mkdir test
echo "useless script" > about.txt
Wird dies:
CommentedOutBlock() {
cd ~/documents
mkdir test
echo "useless script" > about.txt
}
Je nachdem, welchen Editor Sie verwenden, gibt es einige Kurzbefehle, um einen Zeilenblock zu kommentieren.
Eine andere Problemumgehung wäre, Ihren Code in einen Bedingungsblock "if (0)" zu stellen;)