POSIX 7
kennytm zitiert man bash
aber das meiste davon ist auch POSIX 7: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_04 :
Die Umleitungsoperatoren "<<" und "<<-" ermöglichen die Umleitung von Zeilen aus einer Shell-Eingabedatei, dem so genannten "here-document", in die Eingabe eines Befehls.
Das Hier-Dokument wird als ein einzelnes Wort behandelt, das nach dem nächsten <newline>
und fährt fort, bis es eine Zeile gibt, die nur das Trennzeichen und ein <newline>
, ohne <blank>
Zeichen dazwischen. Dann beginnt das nächste here-Dokument, falls es eines gibt. Das Format ist wie folgt:
[n]<<word
here-document
delimiter
wobei das optionale n für die Nummer des Dateideskriptors steht. Wenn die Nummer weggelassen wird, bezieht sich das here-Dokument auf die Standardeingabe (Dateideskriptor 0).
Wenn ein Zeichen in word in Anführungszeichen steht, wird das Trennzeichen durch Entfernen der Anführungszeichen in word gebildet, und die Zeilen des here-Dokuments werden nicht erweitert. Andernfalls ist das Begrenzungszeichen das Wort selbst.
Wenn keine Zeichen im Wort in Anführungszeichen stehen, werden alle Zeilen des here-Dokuments für die Parameterexpansion, Befehlssubstitution und arithmetische Expansion expandiert. In diesem Fall wird die <backslash>
in der Eingabe verhält sich wie der <backslash>
in doppelten Anführungszeichen (siehe Doppelte Anführungszeichen). Das Zeichen für doppelte Anführungszeichen ( '"' ) wird jedoch innerhalb eines here-Dokuments nicht besonders behandelt, außer wenn das doppelte Anführungszeichen innerhalb von "$()", "``" oder "${}" erscheint.
Wenn das Umleitungssymbol "<<-" ist, werden alle führenden <tab>
Zeichen werden aus den Eingabezeilen und der Zeile mit dem nachgestellten Begrenzer entfernt. Wird mehr als ein "<<"- oder "<<-"-Operator in einer Zeile angegeben, so wird das mit dem ersten Operator verbundene here-Dokument von der Anwendung zuerst geliefert und von der Shell zuerst gelesen.
Wenn ein here-Dokument von einem Terminalgerät gelesen wird und die Shell interaktiv ist, schreibt sie den Inhalt der Variable PS2, die wie in Shell-Variablen beschrieben verarbeitet wird, in den Standardfehler, bevor sie jede Eingabezeile liest, bis das Trennzeichen erkannt wurde.
Exemples
Einige noch nicht genannte Beispiele.
Anführungszeichen verhindern die Erweiterung der Parameter
Ohne Anführungszeichen:
a=0
cat <<EOF
$a
EOF
Ausgabe:
0
Mit Zitaten:
a=0
cat <<'EOF'
$a
EOF
oder (hässlich, aber gültig):
a=0
cat <<E"O"F
$a
EOF
Ausgänge:
$a
Der Bindestrich entfernt führende Tabulatoren
Ohne Bindestrich:
cat <<EOF
<tab>a
EOF
donde <tab>
ist ein wörtlicher Tabulator und kann mit Ctrl + V <tab>
Ausgabe:
<tab>a
Mit Bindestrich:
cat <<-EOF
<tab>a
<tab>EOF
Ausgabe:
a
Dies dient natürlich dazu, dass Sie Ihre Dokumente einrücken können. cat
wie der umgebende Code, was einfacher zu lesen und zu pflegen ist. Z.B.:
if true; then
cat <<-EOF
a
EOF
fi
Leider funktioniert dies nicht für Leerzeichen: POSIX bevorzugt tab
Einrückung hier. Igitt.