web-dev-qa-db-de.com

Was ist EOF !! im Bash-Skript?

Es gibt einen Befehl, den ich nicht verstehe:

custom_command << EOF!!

Ich möchte fragen, was EOF !! ist im Bash-Skript. Ich habe EOF bei Google gefunden, aber Google wird das "!!" ignorieren. automatisch, so dass ich EOF nicht finden kann !!. 

Ich kenne das Ende des Datei-Tokens, weiß aber nicht genau, was es mit dem "!!" im Skript Ist dies ein Zeichen, um etwas zu zwingen, etwas in vim's wq zu tun! ?

Warum und wann sollten wir EOF verwenden? statt EOF?

12
Marcus Thornton

In der Befehlszeile wird !! auf den zuletzt ausgeführten Befehl erweitert. Bash druckt die Zeile für Sie aus:

$ ls
a.txt  b.txt
$ cat <<EOF!!
cat <<EOFls
>

In einem Skript ist die Historienerweiterung jedoch standardmäßig deaktiviert, sodass die Ausrufezeichen Teil des Word sind.

#! /bin/bash
ls
cat <<EOF!!
echo 1
EOFls
echo 2

Produziert:

a.txt  b.txt
script.sh: line 7: warning: here-document at line 3 delimited by end-of-file (wanted `EOF!!')
echo 1
EOFls
echo 2

Fügen Sie die folgenden Zeilen hinzu, um Historie und Historienerweiterung in einem Skript zu aktivieren:

set -o history
set -H
15
choroba

Sie können eine beliebige Zeichenfolge als Dokumentendatierzeichen verwenden.

EOF!! ist genau das, was die Person, die das Skript schreibt, für die Verwendung entschied.

4
jlliagre

Es ist wahrscheinlich nur ein komisches heredoc .

Beispiel:

cat << EOF!!
blabla
EOF!!

Hinweis: Dies funktioniert nur in Skriptdateien. Der Befehlszeilen-Parser interpretiert !!.

1
Karoly Horvath

Wie schon andere geschrieben haben, handelt es sich hier um ein Here-Dokument.

Das dafür verwendete Token sollte sorgfältig ausgewählt werden. Da die Wahrscheinlichkeit, dass das Here-Dokument EOF!! enthält, niedriger ist als für EOF selbst, wurde dies ausgewählt.

Ich vermute, sie haben überprüft, dass es vor der Verwendung nicht schadet. !! in einem Skript bezieht sich NICHT auf die Historie, bleibt jedoch so wie sie ist.

0
glglgl