it-swarm.com.de

Zeilen in einem Shell-Skript auskommentieren

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?

49
Vijay
if false
then

...code...

fi

false gibt immer false zurück, sodass der Code immer übersprungen wird.

46
Artelius

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.

44
spbnick

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

26
asev69

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"

Wikipedia-Referenz

20
Buggabill

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/^/#/
9
kdgregory
: || {
your code here
your code here
your code here
your code here
}
4
jj_5698

Nach dieser Seite :

#!/bin/bash
foo=bar
: '
This is a test comment
Author foo bar
Released under GNU 
'

echo "Init..."
# rest of script
1
user2763554

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
}
1
Buksy

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;)

0
Carlos Tasada