Option 1: +=
Verkettungsoperator
Um die Formatierung auf einer Textzeile beizubehalten und mehrere Zeilen im Code zu verwenden, aber nicht beim Drucken, verwenden Sie den +=
Verkettungsoperator, wie folgt:
# Funktionsdefinition
some_func() {
text="Dies ist der erste Teil eines wirklich langen Strings "
text+="den ich in mehreren Zeilen schreiben möchte "
text+="ohne mich um Einrückung sorgen zu müssen. Ich möchte auch, dass es in diesem Fall als eine Zeile gedruckt wird."
echo "$text"
}
# Funktion aufrufen
some_func
Beispiel Ausgabe:
Dies ist der erste Teil eines wirklich langen Strings den ich in mehreren Zeilen schreiben möchte ohne mich um Einrückung sorgen zu müssen. Ich möchte auch, dass es in diesem Fall als eine Zeile gedruckt wird.
Hinweis/für Fortgeschrittene: Sie könnten erzwingen, Zeilenumbrüche im obigen Textstring zu setzen, wenn Sie wollten, indem Sie \n
im Text verwenden, wie in echo -e "some text\n"
oder printf "%s\n" "some text"
.
Option 2: dedent
Funktion für natürlichen Text mit Zeilenumbrüchen
Sie können auch diesen Python-ähnlichen Trick anwenden:
dedent() {
local -n reference="$1"
reference="$(echo "$reference" | sed 's/^[[:space:]]*//')"
}
text="das ist Zeile eins
das ist Zeile zwei
das ist Zeile drei\n"
# `text` wird per Referenz übergeben und enteinzogen
dedent text
printf "$text"
Ausgabe OHNE Aufruf von dedent
zuerst:
das ist Zeile eins
das ist Zeile zwei
das ist Zeile drei
...und MIT Aufruf von dedent
zuerst (wie oben gezeigt):
das ist Zeile eins
das ist Zeile zwei
das ist Zeile drei
Für eine ausführlichere Erklärung siehe, wo ich bereits darüber geschrieben habe:
- Äquivalent zu Pythons textwrap dedent in bash
- Mehrzeiliger String mit zusätzlichem Platz (erhaltene Einrückung)
Und natürlich, danke an @Andreas Louv für das Zeigen des sed
Teils dieser Funktion hier.
6 Stimmen
Wenn Sie eine Verwendungsnachricht als Antwort auf einen falschen Aufruf ausgeben, senden Sie diese normalerweise an den Standardfehlerausgang anstelle des Standardausgangs, mit
echo >&2 ...
3 Stimmen
@MarkReed Die Verwendungsnachricht wird ausgegeben, indem
--help
eingegeben wird (was standardmäßig ausgegeben werden sollte).3 Stimmen
Für andere, die vorbeikommen, gibt es weitere Informationen zu "here documents": tldp.org/LDP/abs/html/here-docs.html
1 Stimmen
Überprüfen Sie die
printf
-basierte Lösung von Gordon Davidson. Trotz des Schattens derecho
- odercat
-basierten Ansätze scheint es viel weniger ein Kludge zu sein. Zugegebenermaßen stellt die `printf'-Syntax eine gewisse Lernkurve dar, aber ich würde gerne von anderen Nachteilen erfahren (? Kompatibilität, Leistung? ...).1 Stimmen
Verwandte: stackoverflow.com/questions/23929235/…