Wie kann ich jede Zeile der folgenden Zeilen eines Skripts kommentieren?
cat ${MYSQLDUMP} | \
sed '1d' | \
tr ",;" "\n" | \
sed -e 's/[asbi]:[0-9]*[:]*//g' -e '/^[{}]/d' -e 's/""//g' -e '/^"{/d' | \
sed -n -e '/^"/p' -e '/^print_value$/,/^option_id$/p' | \
sed -e '/^option_id/d' -e '/^print_value/d' -e 's/^"\(.*\)"$/\1/' | \
tr "\n" "," | \
sed -e 's/,\([0-9]*-[0-9]*-[0-9]*\)/\n\1/g' -e 's/,$//' | \
sed -e 's/^/"/g' -e 's/$/"/g' -e 's/,/","/g' >> ${CSV}
Wenn ich versuche, einen Kommentar hinzuzufügen wie:
cat ${MYSQLDUMP} | \ # Output MYSQLDUMP File
Ich bekomme:
#: not found
Kann man hier einen Kommentar abgeben?
Antworten:
Dies hat einige Gemeinkosten, aber technisch beantwortet es Ihre Frage:
Und speziell für Pipelines gibt es eine saubere Lösung ohne Overhead:
Siehe Frage zum Stapelüberlauf So setzen Sie einen Zeilenkommentar für einen mehrzeiligen Befehl .
quelle
Der nachfolgende Backslash muss das letzte Zeichen in der Zeile sein, damit er als Fortsetzungsbefehl interpretiert werden kann. Danach sind keine Kommentare oder Leerzeichen mehr zulässig.
Sie sollten in der Lage sein, Kommentarzeilen zwischen Ihre Befehle zu setzen
quelle
|
. Wenn Sie es versuchencat file1\<newline>#comment<newline>file2
, werden Sie sehen, dass Sie nicht bekommencat file1 file2
, sonderncat file1; file2
.cat file1 | # comment<newline>sort
funktioniert dies jedoch einwandfrei. So auchcat file1 && # comment<newline>echo foo
. Kommentare können also nach|
oder&&
oder||
eingefügt werden, jedoch nicht nach `\` oder mitten in einem Befehl.Wie DigitalRoss hervorhob, ist der nachfolgende Backslash nicht erforderlich, wenn die Zeile enden würde
|
. Und Sie können Kommentare in eine Zeile einfügen, die a folgt|
:quelle
Der Backslash entgeht dem # und interpretiert es als Literalzeichen anstelle eines Kommentarzeichens.
quelle
$IFS
Kommentar-HacksDieser Hack verwendet die Parametererweiterung on
$IFS
, mit der Wörter in Befehlen getrennt werden:Ähnlich:
Auf diese Weise können Sie einen Kommentar in eine Befehlszeile mit der folgenden Bezeichnung einfügen:
Der Kommentar muss jedoch vor der
\
Fortsetzung stehen.Beachten Sie, dass die Parametererweiterung innerhalb des Kommentars durchgeführt wird:
Seltene Ausnahme
Der einzige seltene Fall, in dem dies fehlschlägt, ist, wenn
$IFS
zuvor mit dem genauen Text begonnen wurde, der über die Erweiterung entfernt wurde (dh nach dem#
Zeichen):Beachten Sie, dass das Finale
foobar
keinen Platz hat, um das Problem zu veranschaulichen.Da
$IFS
standardmäßig nur Leerzeichen enthalten sind, ist es äußerst unwahrscheinlich, dass Sie auf dieses Problem stoßen.Dank an @ pjhs Kommentar, der diese Antwort ausgelöst hat.
quelle
Zusätzlich zu den Beispielen von DigitalRoss gibt es hier ein weiteres Formular, das Sie verwenden können, wenn Sie
$()
anstelle von Backticks bevorzugen`
Natürlich können Sie die Doppelpunktsyntax auch mit Backticks verwenden:
Zusätzliche Bemerkungen
Der Grund, warum
$(#comment)
dies nicht funktioniert, ist#
, dass der Rest der Zeile als Kommentar behandelt wird, einschließlich der schließenden Klammern :comment)
. Die Klammern werden also niemals geschlossen.Backticks werden anders analysiert und erkennen den schließenden Backtick auch nach a
#
.quelle
Hier ist ein Bash-Skript, das die Ideen und Redewendungen mehrerer vorheriger Kommentare kombiniert, um mit Beispielen Inline-Kommentare in der allgemeinen Form bereitzustellen
${__+ <comment text>}
.Bestimmtes
<comment text>
kann mehrzeilig sein<comment text>
ist nicht parametererweitertEs gibt eine Einschränkung
<comment text>
, nämlich, dass unausgeglichene Klammern'}'
und Klammern')'
geschützt werden müssen (dh'\}'
und'\)'
).Es gibt eine Anforderung an die lokale Bash-Umgebung:
__
muss nicht gesetzt seinJeder andere syntaktisch gültige Bash-Parametername wird anstelle von verwendet
__
, sofern der Name keinen festgelegten Wert hat.Ein Beispielskript folgt
quelle