it-swarm.com.de

Möglichkeit, mehrzeilige Kommentare in Bash zu erstellen?

Ich habe vor kurzem angefangen, Shell-Skript zu studieren, und möchte in der Lage sein, eine Reihe von Zeilen in einem Shell-Skript auszukommentieren. Ich meine, wie es im Fall von C/Java ist:

/* comment1
   comment2 
   comment3
*/`

Wie könnte ich das machen?

160

Verwenden Sie : ' zum Öffnen und ' zum Schließen.

Zum Beispiel:

: '
This is a
very neat comment
in bash
'
290
Vegas

Mehrzeiliger Kommentar in Bash

: <<'END_COMMENT'
This is a heredoc (<<) redirected to a NOP command (:).
The single quotes around END_COMMENT are important,
because it disables variable resolving and command resolving
within these lines.  Without the single-quotes around END_COMMENT,
the following two $() `` commands would get executed:
$(gibberish command)
`rm -fr mydir`
comment1
comment2 
comment3
END_COMMENT
108
David Okwii

Bash bietet keine eingebauten Funktionen, aber es gibt Hacks, die die vorhandene Bash-Syntax verwenden. Am einfachsten ist es, ein HEREDOC zu verwenden, aber machen Sie deutlich, was Sie tun, und verwenden Sie überall denselben HEREDOC-Marker:

<< --MULTILINE-COMMENT--
line 1
line 2

line 3
line 4
--MULTILINE-COMMENT--

Einige Posts erwähnen, dass der HEREDOC-Marker in Anführungszeichen gesetzt werden muss, um einige Shell-Parsing-Nebenwirkungen zu vermeiden. Ich habe dies nur für erforderlich befunden, wenn Sie in Ihrem Kommentar Anführungszeichen verwenden. Auch bei set -o verbose und $variables, die im Kommentar erwähnt werden, ist es nicht erforderlich, den Marker anzugeben. YMMV.

Wenn Sie den in einer anderen Antwort erwähnten : ' -Ansatz verwenden, dokumentieren Sie, was es ist, über einen Metakommentar, verwenden Sie überall denselben Metakommentar und denken Sie daran, alle Vorkommen von ' innerhalb des Kommentars zu verdoppeln ( Ein Syntax-Coloring-Editor macht es deutlich:

: 'Multiline comment:
line 1
line 2 we''re going to try this eventually
line 3
'

Beide sind Hacks, damit sie in Zukunft Skripte brechen können.

Es gibt sicherlich andere Techniken, aber es scheint keinen "konventionellen" Weg zu geben, dies zu tun.

24
Oliver

Nachdem ich die anderen Antworten hier gelesen hatte, kam ich auf das Folgende, was meiner Meinung nach wirklich klar macht, dass es ein Kommentar ist. Besonders geeignet für In-Script-Verwendungshinweise:

<< ////

Usage:
This script launches a spaceship to the moon. It's doing so by 
leveraging the power of the Fifth Element, AKA Leeloo.
Will only work if you're Bruce Willis or a relative of Milla Jovovich.

////

Als Programmierer registriert sich die Abfolge der Schrägstriche sofort in meinem Gehirn als Kommentar (obwohl Schrägstriche normalerweise für Zeilenkommentare verwendet werden).

Natürlich ist "////" nur eine Zeichenfolge; Die Anzahl der Schrägstriche im Präfix und im Suffix muss gleich sein.

18
noamtm

wie ist deine Meinung dazu?

function giveitauniquename()
{
  so this is a comment
  echo "there's no need to further escape apostrophes/etc if you are commenting your code this way"
  the drawback is it will be stored in memory as a function as long as your script runs unless you explicitly unset it
  only valid-ish bash allowed inside for instance these would not work without the "pound" signs:
  1, for #((
  2, this #wouldn't work either
  function giveitadifferentuniquename()
  {
    echo nestable
  }
}
3
Imre

Hier ist, wie ich mehrzeilige Kommentare in Bash mache.

Dieser Mechanismus hat zwei Vorteile, die ich zu schätzen weiß. Zum einen können Kommentare verschachtelt werden. Das andere ist, dass Blöcke aktiviert werden können, indem einfach die einleitende Zeile auskommentiert wird.

#!/bin/bash
# : <<'####.block.A'
echo "foo {" 1>&2
fn data1
echo "foo }" 1>&2
: <<'####.block.B'
fn data2 || exit
exit 1
####.block.B
echo "can't happen" 1>&2
####.block.A

Im obigen Beispiel ist der Block "B" auskommentiert, aber die Teile des Blocks "A", die nicht zum Block "B" gehören, sind nicht auskommentiert.

Wenn Sie dieses Beispiel ausführen, erhalten Sie folgende Ausgabe:

foo {
./example: line 5: fn: command not found
foo }
can't happen
2
bugi

# Ich mag Faulheit und Einfachheit. Ich würde # mit einem lustigen Workaround verwenden:

1 DRÜCKEN SIE:] find Strg + F oder cmd + F oder was auch immer [ um die Suchfunktion auszulösen

2 Verwenden Sie im Suchfeld einen regulären Ausdruck wie: (^.+)

3 ersetzen durch: # $1 oder wenn Sie #$1 bevorzugen


# Hinweis: Möglicherweise haben Sie die drei Schritte nicht in Ihrem Editor. Verwenden Sie in diesem Fall ein Online-Regex-Tool (aus politischen Gründen kann hier kein Tool vorgeschlagen werden):

  1. Wählen Sie den Text aus, kopieren Sie ihn, wo immer Sie sich gerade befinden, und fügen Sie ihn in das Online-Regex-Tool ein
  2. Verwenden Sie (^.+) als Regex und #$1 oder #\1 als Substitutionsmuster
  3. Wählen Sie den Text aus, kopieren Sie ihn und fügen Sie ihn wieder an der Stelle ein, an der Sie begonnen haben

# Genieße deine Hashes!

0
AMDP