Beim Erstellen von Shell-Skripten mithilfe von Pipelines und unter Verwendung des Backslashs zum Fortsetzen von Zeilen möchte ich Kommentare in robuster, lesbarer und portabler Weise in separate Zeilen einfügen .
Beispiel für diesen nicht kommentierten mehrzeiligen Befehl (der aus Gründen der Übersichtlichkeit von @DigitalRoss gestohlen wurde):
echo abc |
tr a-z A-Z |
sort |
uniq
... das Folgende kommt dem, was ich erreichen möchte, ästhetisch am nächsten, funktioniert aber aus offensichtlichen Gründen nicht ... und ja, mir ist klar, dass dies normalerweise keine Anmerkung wert ist:
# Perform critical system task.
# NOTE - An example of what does *not* work.
echo abc |
# Convert lowercase to uppercase.
tr a-z A-Z |
# Sort the results.
sort |
# Only show unique lines.
uniq
Bestehende verwandte Antworten erscheinen mir wie folgt unbefriedigend :
Erstens funktioniert die Antwort von Glenn Jackman (Hinzufügen von Argumenten zu einem Array und anschließendes Ausführen des Arrays) für einzelne Befehle, funktioniert jedoch nicht für Pipelining (und selbst wenn dies der Fall ist , erhöht sie die Komplexität, die ich vermeiden möchte).
Zweitens scheint die Antwort von @Gilles hier (die verwendet :
) auch nicht mit Pipelining zu funktionieren, da sie den Fluss der Pipeline verändert:
$ echo "abc" | :
$
( ANMERKUNG : Wenn es ein Äquivalent gibt, :
das die Ausgabe unverändert weitergibt, wäre dies ästhetisch akzeptabel, aber ich konnte keines finden. Ich könnte ein benutzerdefiniertes schreiben, aber es würde die Portabilität verringern.)
Schließlich eignet sich der letzte Teil von DigitalRoss 'Antwort auf StackOverflow gut zum Hinzufügen von Kommentaren in derselben Zeile, aber ich bevorzuge nachdrücklich Kommentare in separaten Zeilen. Andernfalls wird die Lesbarkeit verringert, wenn die Zeilen sehr unterschiedlich lang sind:
echo abc | # normal comment OK here`
/usr/local/bin/really/long/path/ridiculously-long-filename.sh | # another normal comment OK here
sort | # the pipelines are automatically continued
uniq # final comment
Ich suche nach Antworten, die die Lesbarkeit bewahren und die Komplexität minimieren, oder nach Hintergrundinformationen, warum das, wonach ich suche, nicht machbar ist.
i++; // increment i by one
. Ich schlage vor, Sie lesen "Die Elemente des Programmierstils"Antworten:
Wie wäre es damit?
(Der Backslash muss als letztes Zeichen in diesen Zeilen verwendet werden.) Ich bin nicht sicher, ob dieser Ansatz portabel ist, aber er funktioniert mit dem aktuellen
bash
.quelle