it-swarm.com.de

EOF in Cat und weniger

Ich bin neu in Linux-Skript und ich habe einige Befehle und ich habe sie nicht verstanden.

cat <<- _EOF_
command1
command2
command3
_EOF_

Ebenfalls,

less <<- _EOF
command1
command2
command3
_EOF

Kann jemand sie mir erklären?

1
Ghassan

Im Programmcode müssen Sie markieren, welche Teile Befehle und welche Daten sein sollen. Typische Datentypen sind Strings, dh Zeichenfolgen (Buchstaben, Ziffern usw.)

Es gibt verschiedene Möglichkeiten, Zeichenfolgenliterale anzugeben. Der gebräuchlichste Weg ist Anführungszeichen die Zeichenfolgendaten:

PATH="/home/user"
USER='joe'

Es kann jedoch schwierig sein, längere Zeichenfolgenliterale und/oder Zeilenumbrüche zu verarbeiten:

MESSAGE="This is a relatively long string which isn't represented very well as a typical quoted string.\nAnd there are linebreaks in it."

In solchen Fällen möchten Sie wahrscheinlich sagen können: "Behandeln Sie Folgendes als Zeichenfolge, bis ich Ihnen etwas anderes sage". Und genau das macht ein hier Dokument. Es ist eine andere Art, ein String-Literal zu bezeichnen. Sie definieren eine Markierung, die das Ende Ihres Textes kennzeichnet, setzen dann Ihren Text und dann die Markierung:

MESSAGE=<< EOF
Here be a long string.
With line breaks.
EOF

Sie können den Marker frei wählen, aber es ist in der Regel so etwas wie EOF ("Dateiende"), eot (" Ende des Textes ") oder ähnlich. Sie hätten auch "ABC" wählen können

MESSAGE=<< ABC
Here be a long string.
With line breaks.
ABC

"Here Documents", auch bekannt als "Heredocs", "Here-Strings" oder ähnliches, haben ihren Ursprung in Unix-Shells wie bash und sind heute in vielen Programmiersprachen zu finden.

In Shells funktionieren sie etwas anders, da sie weniger Zeichenfolgen darstellen als Dateien. Also zum Beispiel

cat << EOF
One
EOF

ist äquivalent zu

cat data.txt # where data.txt contains 'One'

Die Variante mit <<- anstelle von "<<" ignoriert führende Leerzeichen in den heredoc-Daten, so dass Sie Ihren Code besser lesbar machen können, indem Sie den heredoc identifizieren:

cat <<- EOF
  One
  Two
  Three
EOF
6