Что такое EOF! в bash script?

Есть команда, которую я не понимаю:

custom_command << EOF!!

Я хочу спросить, что такое EOF!! находится в bash script. Я нашел EOF с google, но google проигнорирует "!!" автоматически, поэтому я не могу найти EOF!!.

Я знаю конец токена файла, но я точно не знаю, что значит "!!". в script. Это знак, чтобы заставить что-то сделать, например, в vim wq!

Плюс, зачем и когда мы должны использовать EOF!! вместо EOF?

Ответ 1

В командной строке !! будет расширен до последней выполненной команды. Bash напечатает строку для вас:

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

В script расширение истории по умолчанию отключено, поэтому восклицательные знаки являются частью слова.

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

Выдает:

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

Чтобы включить историю и расширение истории в script, добавьте следующие строки:

set -o history
set -H

Ответ 2

Вы можете использовать любую строку, как здесь, терминатор документа.

EOF!! - это то, что решил использовать человек, пишущий script.

Ответ 3

Возможно, это просто странный heredoc.

Пример:

cat << EOF!!
blabla
EOF!!

Примечание: это работает только в файлах script. Анализатор командной строки интерпретирует !!.

Ответ 4

Как уже писали другие, это документ здесь.

Используемый для этого токен должен быть выбран тщательно; поскольку вероятность того, что здесь-документ содержит EOF!!, меньше, чем для EOF, они выбрали это.

Я полагаю, они проверяли, что это не наносит вреда, прежде чем использовать его; !! в script НЕ относится к истории, но он остается таким, как есть.