2016-05-04 20 views
0

Ich bin neu in Bash Scripting. Ich stieß auf this Link und bemerkte eine ungewöhnliche Syntax für Katze.Verständnis Katze <<! Syntax

cat << ! 
HOPE THIS WORKS 
This sample E-mail message demonstrates how one can attach 
files when sending messages with the Unix sendmail utility. 
! 

uuencode ${file_1} ${file_1} 
uuencode ${file_2} ${file_2} 
uuencode ${file_3} ${file_3} 
! 

Was bedeutet die < < bedeuten? Was macht das! bedeuten? Wie kommt es, dass die Katze öffnet und schließt!, Aber Uuencode nicht?

EDIT: Vielen Dank für die Hilfe! Die letzte offene Frage, die ich habe, ist, warum gibt es keine Öffnung und Markierung für die Uuencode-Sektion. Von dem, was ich verstehe, hat Katze einen << !, der anzeigt, dass es ein HEREDOC ist. uuencode scheint jedoch nicht wie ein HEREDOC. Was gibt?

+2

Es genannt wird [hier Dokumente] (https://en.wikipedia.org/wiki/Here_document#Unix_shells). Nur ein seltsamer Marker –

+2

Das sieht wie ein Heredoc aus, aber dieses letzte '!' Verwirrt mich. – user2357112

+0

Das letzte '!' Sieht nur aus wie ein Tippfehler; Es sollte entfernt werden. – chepner

Antwort

2

Sein genannt heredoc, und seine wie folgt aufgebaut:

command << MARKER 
Literal text here, can contain $variables 
and newlines, 
    leading spaces 
    and tabs... 
MARKER 

und arbeitet mit allem, was zwischen den MARKER als stdin zu dem angegebenen Befehl gehen. Der von Ihnen verwendete Marker ist optional und in Ihrem Beispiel wird ! verwendet. Und wenn Sie den Befehl cat mit Eingang ernähren sich von stdin wird es einfach, es zu stdout drucken:

cat << ! 
all this text will go to stdout 
!