GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie funktioniert cat << EOF in Bash?

Der cat <<EOF Syntax ist sehr nützlich, wenn Sie mit mehrzeiligem Text in Bash arbeiten, z. beim Zuweisen eines mehrzeiligen Strings zu einer Shell-Variablen, einer Datei oder einer Pipe.

Beispiele für cat <<EOF Syntaxverwendung in Bash:

1. Einer Shell-Variablen mehrzeiligen String zuweisen

$ sql=$(cat <<EOF
SELECT foo, bar FROM db
WHERE foo='baz'
EOF
)

Die $sql Die Variable enthält jetzt auch die Zeilenumbrüche. Sie können sich mit echo -e "$sql" verifizieren .

2. Übergeben Sie eine mehrzeilige Zeichenfolge an eine Datei in Bash

$ cat <<EOF > print.sh
#!/bin/bash
echo \$PWD
echo $PWD
EOF

Die print.sh Datei enthält jetzt:

#!/bin/bash
echo $PWD
echo /home/user

3. Übergeben Sie einen mehrzeiligen String an eine Pipe in Bash

$ cat <<EOF | grep 'b' | tee b.txt
foo
bar
baz
EOF

Die b.txt Datei enthält bar und baz Linien. Die gleiche Ausgabe wird an stdout ausgegeben .


Dies wird Heredoc genannt format, um eine Zeichenfolge in stdin bereitzustellen. Siehe https://en.wikipedia.org/wiki/Here_document#Unix_shells für weitere Details.

Ab man bash :

Hier Dokumente

Diese Art der Umleitung weist die Shell an, Eingaben aus der aktuellen Quelle zu lesen, bis eine Zeile zu sehen ist, die nur ein Wort (ohne nachgestellte Leerzeichen) enthält.

Alle bis dahin gelesenen Zeilen werden dann als Standardeingabe für einen Befehl verwendet.

Das Format von Here-Dokumenten ist:

          <<[-]word
                  here-document
          delimiter

Für word wird keine Parametererweiterung, Befehlsersetzung, arithmetische Erweiterung oder Pfadnamenerweiterung durchgeführt . Wenn irgendwelche Zeichen in word in Anführungszeichen gesetzt, das Trennzeichen ist das Ergebnis der Zitatentfernung bei word , und die Zeilen im hier-Dokument werden nicht erweitert. Wenn word ohne Anführungszeichen, alle Zeilen des hier-Dokuments Parametererweiterung, Befehlssubstitution und Arithmetikerweiterung unterzogen. Im letzteren Fall die Zeichenfolge \<newline> isignored und \ muss verwendet werden, um die Zeichen \ in Anführungszeichen zu setzen , $ , und ` .

Wenn der Umleitungsoperator <<- ist , dann werden alle führenden Tabulatorzeichen aus den Eingabezeilen und der Zeile mit Trennzeichen entfernt . Dadurch können Here-Dokumente innerhalb von Shell-Skripten auf natürliche Weise eingerückt werden.


In Ihrem Fall ist "EOF" als "Here Tag" bekannt. Grundsätzlich <<Here teilt der Shell mit, dass Sie eine mehrzeilige Zeichenfolge bis zum "Tag" Here eingeben werden . Sie können dieses Tag beliebig benennen, oft ist es EOF oder STOP .

Einige Regeln zu den Here-Tags:

  1. Das Tag kann ein beliebiger String sein, Groß- oder Kleinbuchstaben, obwohl die meisten Leute per Konvention Großbuchstaben verwenden.
  2. Das Tag wird nicht als Here-Tag betrachtet, wenn sich andere Wörter in dieser Zeile befinden. In diesem Fall wird es lediglich als Teil der Zeichenfolge betrachtet. Das Tag sollte allein in einer separaten Zeile stehen, um als Tag betrachtet zu werden.
  3. Das Tag sollte keine führenden oder abschließenden Leerzeichen in dieser Zeile haben, um als Tag betrachtet zu werden. Andernfalls wird es als Teil des Strings betrachtet.

Beispiel:

$ cat >> test <<HERE
> Hello world HERE <-- Not by itself on a separate line -> not considered end of string
> This is a test
>  HERE <-- Leading space, so not considered end of string
> and a new line
> HERE <-- Now we have the end of the string

Linux
  1. Der Zweck von .bashrc und wie funktioniert es?

  2. Ssh – Wie funktioniert TCP-Keepalive in Ssh?

  3. So prüfen Sie, ob String in Bash einen Teilstring enthält

  4. Was macht 'bash -c'?

  5. Wie kann ich die wörtlichen Zeichen einer Bash-Befehlszeichenfolge überprüfen?

So prüfen Sie, ob eine Zeichenfolge in Bash eine Teilzeichenfolge enthält

Wie funktioniert Swap-Speicher in Linux?

Wie funktioniert sig_atomic_t eigentlich?

Wie testet Bash 'false'?

Wie funktioniert ein Debugger unter Linux?

Wie funktioniert die Anzeige von Linux?